CompilerGeneration.jrag 17.6 KB
Newer Older
1
2
/* -*-Java-*- */

3
4
5
6
7
8
/* 
 * Copyright (C) 2006  Anders Nilsson <anders.nilsson@cs.lth.se>
 *
 * This file is part of OntologyCompiler.
 */

9
import java.io.*;
10
import java.util.*;
11

12
aspect AbsGrammarGeneration {
13
    void ASTNode.genAbsGrammar(PrintStream pStream) {
14
15
16
		for (int i=0; i<getNumChild(); i++) {
			getChild(i).genAbsGrammar(pStream);
		}
17
18
    }

19
    public void Start.genAbsGrammar(PrintStream pStream) {
20
		pStream.println("// Predefined types");
Anders Nilsson's avatar
Anders Nilsson committed
21
		pStream.println("Start ::= Element*;");
Anders Nilsson's avatar
Anders Nilsson committed
22
		pStream.println("abstract Thing : ComplexElement ::=;");
23
		pStream.println("abstract Element;");
Anders Nilsson's avatar
Anders Nilsson committed
24
 		pStream.println("ComplexElement : Element ::=  OwlIdentifier Attribute* Element*;");
25
		pStream.println("ValueElement : ComplexElement;");
26
		pStream.println("abstract SimpleElement : Element;");
27
28
29
		pStream.println("StringElement : SimpleElement ::= <LITERAL>;");
		pStream.println("IntElement : SimpleElement ::= <LITERAL>;");
		pStream.println("FloatElement : SimpleElement ::= <LITERAL>;");
30
		pStream.println("ClassUse : Thing  ::= /decl:Thing/;");
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
		pStream.println("Attribute ::= Value;");
		pStream.println("RdfDatatype : Attribute ::= ;");
		pStream.println("RdfId : Attribute ::= ;");
		pStream.println("Xmlns : Attribute ::= ;");
		pStream.println("XmlnsProtege : Attribute ::= ;");
		pStream.println("XmlnsRdf : Attribute ::= ;");
		pStream.println("XmlnsXsd : Attribute ::= ;");
		pStream.println("XmlnsRdfs : Attribute ::= ;");
		pStream.println("XmlnsOwl : Attribute ::= ;");
		pStream.println("XmlnsDaml : Attribute ::= ;");
		pStream.println("XmlnsP1 : Attribute ::= ;");
		pStream.println("XmlnsDc : Attribute ::= ;");
		pStream.println("XmlBase : Attribute ::= ;");
		pStream.println("RdfResource : Attribute ::= ;");
		pStream.println("RdfAbout : Attribute ::= ;");
		pStream.println("RdfParseType : Attribute ::= ;");
		pStream.println("Version : Attribute ::= ;");
		pStream.println("Value ::= <STRING_LITERAL>;");
49
		pStream.println("OwlIdentifier ::= <IDENTIFIER>;");
50
51
52
		pStream.println("AttrValue ::= <STRING_LITERAL>;");
		pStream.println();
		pStream.println("// Generated types");
53
		super.genAbsGrammar(pStream);
54
55
    }

56
    void OwlClassDecl.genAbsGrammar(PrintStream pStream) {
57
58
59
		pStream.print(getId());
		pStream.print(" : "+getSuperClass().getId());	
		pStream.print(" ::=");
60
		getOwnRestrictions().genAbsGrammar(pStream);
61
		pStream.println(";");
62
63
    }

64
65
66
67
68
69
70
	void Restrictions.genAbsGrammar(PrintStream pStream) {
		for (int i=0; i<getNumOwlRestriction(); i++) {
			pStream.print(" ");
			getOwlRestriction(i).genAbsGrammar(pStream);
		}
	}

71
    void OwlRestriction.genAbsGrammar(PrintStream pStream) {
Anders Nilsson's avatar
Anders Nilsson committed
72
		pStream.print(name());
73
		pStream.print(":Thing");
74
75
76
		if (allValuesFrom()) {
			pStream.print("*");
		}
77
    }
78

79
80
81
82
83
84
85
86
    String OwlRestriction.getRestrictionPropertyId() {
		for (int i=0; i<getNumElement(); i++) {
			ComplexElement e = (ComplexElement) getElement(i);
			if (e instanceof OwlOnProperty) {
				return e.getId(); 
			}
		}
		return "_Unknown_";
87
88
    } 

89
90
91
92
93
94
95
96
97
    String OwlRestriction.getRestrictionClassId() {
		for (int i=0; i<getNumElement(); i++) {
			ComplexElement e = (ComplexElement) getElement(i);
			if (e instanceof OwlAllValuesFrom || 
				e instanceof OwlSomeValuesFrom) {
				return e.getId(); // Ugly as hell!!
			}
		}
		return "_Unknown_";
98
99
100
    } 

    syn lazy boolean OwlRestriction.allValuesFrom() {
101
102
103
104
105
106
		for (int i=0; i<getNumElement(); i++) {
			if (getElement(i) instanceof OwlAllValuesFrom) {
				return true;
			}
		}
		return false;
107
108
    }

109
110
}

111
112
113
114
115
116
aspect GenAspects {
	public void Start.genAspects(PrintStream pStream) {
		pStream.println();
		pStream.println("import java.io.PrintStream;");
		pStream.println();
		genRewrites(pStream);
117
		genMisc(pStream);
118
		genPrettyPrinter(pStream);
119
120
121
	}
}

122
aspect GenPrettyPrinter {
123
	public void ASTNode.genPrettyPrinter(PrintStream pStream) {
124
		for (int i=0; i<getNumChild(); i++) {
125
			getChild(i).genPrettyPrinter(pStream);
126
		}
127
128
	}

129
	public void Start.genPrettyPrinter(PrintStream pStream) {
130
		pStream.println();
131
132
133
		pStream.println("aspect PrettyPrinter {");
		pStream.println("  public void ASTNode.prettyPrint(String indent, PrintStream pStream) {");
		pStream.println("    for (int i=0; i<getNumChild(); i++) {");
134
		pStream.println("      getChild(i).prettyPrint(indent,pStream);");
135
		pStream.println("    }");
136
		pStream.println("  }\n");
Anders Nilsson's avatar
Anders Nilsson committed
137
138
139
140
		pStream.println("  public void Start.prettyPrint(String indent, PrintStream pStream) {");
		pStream.println("    for (int i=0; i<getNumElement(); i++) {");
		pStream.println("      getElement(i).prettyPrint(indent,pStream);");
		pStream.println("    }");
141
142
		pStream.println("  }\n");
		pStream.println("  syn String Attribute.id() = \"\";");
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
		pStream.println("  eq RdfAbout.id() = \"rdf:about\";");
		pStream.println("  eq RdfDatatype.id() = \"rdf:datatype\";");
		pStream.println("  eq RdfId.id() = \"rdf:ID\";");
		pStream.println("  eq RdfParseType.id() = \"rdf:parseType\";");
		pStream.println("  eq RdfResource.id() = \"rdf:resource\";");
		pStream.println("  eq XmlBase.id() = \"xml:base\";");
		pStream.println("  eq Xmlns.id() = \"xmlns\";");
		pStream.println("  eq XmlnsDaml.id() = \"xmlns:daml\";");
		pStream.println("  eq XmlnsDc.id() = \"xmlns:dc\";");
		pStream.println("  eq XmlnsOwl.id() = \"xmlns:owl\";");
		pStream.println("  eq XmlnsP1.id() = \"xmlns:p1\";");
		pStream.println("  eq XmlnsProtege.id() = \"xmlns:protege\";");
		pStream.println("  eq XmlnsRdf.id() = \"xmlns:rdf\";");
		pStream.println("  eq XmlnsRdfs.id() = \"xmlns:rdfs\";");
		pStream.println("  eq XmlnsXsd.id() = \"xmlns:xsd\";");
158
159
		pStream.println("  public void Attribute.prettyPrint(String indent, PrintStream pStream) {");
		pStream.println("    System.out.print(\" \"+id()+\"=\"+getValue().getSTRING_LITERAL());");
Anders Nilsson's avatar
Anders Nilsson committed
160
		pStream.println("  }\n");
161
162
163
164
165
166
167
168
169
		pStream.println(ind(1)+"public void ValueElement.prettyPrint(String indent, PrintStream pStream) {");
		pStream.println(ind(2)+"System.out.print(indent+\"<value \");");
		pStream.println(ind(2)+"for (int i=0; i<getNumAttribute(); i++) {");
		pStream.println(ind(3)+"getAttribute(i).prettyPrint(indent,pStream);");
		pStream.println(ind(2)+"}");
		pStream.println(ind(2)+"System.out.println(\">\");");
		pStream.println(ind(2)+"System.out.println(indent+\"  \"+value());");
		pStream.println(ind(2)+"System.out.println(indent+\"</value>\");");
		pStream.println(ind(1)+"}\n");
170
171
172
173
174
175
176
177
		// Generate prettyprinter for ClassUse
		pStream.println(ind(1)+"public void ClassUse.prettyPrint(String indent, PrintStream pStream) {");
		pStream.println(ind(2)+"System.out.print(indent+\"<\"+name());");
		pStream.println(ind(2)+"for (int i=0; i<getNumAttribute(); i++) {");
		pStream.println(ind(3)+"getAttribute(i).prettyPrint(indent,pStream);");
		pStream.println(ind(2)+"}");
		pStream.println(ind(2)+"System.out.println(\"/>\");");
		pStream.println(ind(1)+"}\n");
178
		super.genPrettyPrinter(pStream);
179
180
181
		pStream.println("}\n");
	}

182
	public void OwlClassDecl.genPrettyPrinter(PrintStream pStream) {
183
		// Generate prettyprinter for class declaration
184
		pStream.print(ind(1)+"public void "+name());
185
		pStream.println(".prettyPrint(String indent, PrintStream pStream) {");
186
187
188
189
190
191
		pStream.println(ind(2)+"System.out.print(indent+\"<"+name()+"\");");
		pStream.println(ind(2)+"for (int i=0; i<getNumAttribute(); i++) {");
		pStream.println(ind(3)+"getAttribute(i).prettyPrint(indent,pStream);");
		pStream.println(ind(2)+"}");
		pStream.println("System.out.println(\">\");");
		pStream.println(ind(2)+"String childIndent = indent + \"  \";");
Anders Nilsson's avatar
Anders Nilsson committed
192
193
194
195
196
197
198
199
200
201
202
203
// 		Restrictions restr = getRestrictions();
// 		for (int i=0; i<restr.getNumOwlRestriction(); i++) {
// 			OwlRestriction r = restr.getOwlRestriction(i);
// 			pStream.println(ind(2)+"System.out.println(childIndent+\"<has"+
// 							r.name()+">\");");
// 			pStream.println(ind(2)+"for (int i=0; i<getNum"+r.name()+"(); i++) {");
// 			pStream.println(ind(3)+"get"+r.name()+
// 							"(i).prettyPrint(childIndent+\"  \",pStream);");
// 			pStream.println(ind(2)+"}");
// 			pStream.println(ind(2)+"System.out.println(childIndent+\"</has"+
// 							r.name()+">\");");
// 		}
204
205
206
		pStream.println(ind(2)+"for (int i=0; i<getNumElement(); i++) {");
		pStream.println(ind(3)+"getElement(i).prettyPrint(childIndent,pStream);");
		pStream.println(ind(2)+"}");
207
208
		pStream.println(ind(1)+"System.out.println(indent+\"</"+name()+">\");");
		pStream.println(ind(1)+"}\n");		
209
210
211
212
213
214
215
216
217
218
219
220
221
222
	}
}

aspect GenRewrites {

    public void ASTNode.genRewrites(PrintStream pStream) {
		for (int i=0; i<getNumChild(); i++) {
			getChild(i).genRewrites(pStream);
		}
    }

	public void Start.genRewrites(PrintStream pStream) {
		pStream.println();
		pStream.println("aspect Rewrites {");
223
		pStream.println(ind(1)+"rewrite ComplexElement {");
224
		pStream.println(ind(2)+"when (!(this instanceof ClassUse) && getOwlIdentifier().getIDENTIFIER().equals(\"value\") && !(this instanceof ValueElement))");
225
226
227
228
229
230
231
232
		pStream.println(ind(3)+"to ValueElement {");
		pStream.println(ind(3)+"ValueElement node = new ValueElement();");
		pStream.println(ind(3)+"node.setOwlIdentifier(getOwlIdentifier());");
		pStream.println(ind(3)+"node.setAttributeList(getAttributeList());");
		pStream.println(ind(3)+"node.setElementList(getElementList());");
		pStream.println(ind(3)+"return node;");
		pStream.println(ind(2)+"}");
		pStream.println(ind(1)+"}");
Anders Nilsson's avatar
Anders Nilsson committed
233
234

		// TEMPORARY!!!!!
Anders Nilsson's avatar
Anders Nilsson committed
235
236
		// Rewrite isSkillOf/hasSkill/hasProperty/isPropertyOf to ClassUse.
		// Should probably be auto-generated instead.
Anders Nilsson's avatar
Anders Nilsson committed
237
238
		pStream.println(ind(1)+"rewrite ComplexElement {");
		pStream.println(ind(2)+"when ((name().equals(\"hasSkill\")");
Anders Nilsson's avatar
Anders Nilsson committed
239
240
241
242
243
244
245
246
247
248
		pStream.println(ind(2)+"|| name().equals(\"hasProperty\"))");
		pStream.println("&& getNumAttribute() > 0 && getAttribute(0) instanceof RdfResource)");
		pStream.println(ind(2)+"to ClassUse {");
		pStream.println(ind(3)+"ClassUse use = new ClassUse();");
		pStream.println(ind(3)+"String att = getAttribute(0).name();");
		pStream.println(ind(3)+"use.setOwlIdentifier(new OwlIdentifier(att.substring(att.indexOf('#')+1,att.indexOf('_'))));");
		pStream.println(ind(3)+"use.setAttributeList(getAttributeList());");
		pStream.println(ind(3)+"use.setElementList(new List());");
		pStream.println(ind(3)+"return use;");
		pStream.println(ind(2)+"}");
249
250
251
252
253
254
255
256
257
258
259
// 		pStream.println(ind(2)+"when ((name().equals(\"isSkillOf\")");
// 		pStream.println(ind(2)+"|| name().equals(\"isPropertyOf\"))");
// 		pStream.println("&& getNumAttribute() > 0 && getAttribute(0) instanceof RdfResource)");
// 		pStream.println(ind(2)+"to ClassUse {");
// 		pStream.println(ind(3)+"ClassUse use = new ClassUse();");
// 		pStream.println(ind(3)+"String att = getAttribute(0).name();");
// 		pStream.println(ind(3)+"use.setOwlIdentifier(new OwlIdentifier(att.substring(att.indexOf('#')+1,att.indexOf('_'))));");
// 		pStream.println(ind(3)+"use.setAttributeList(getAttributeList());");
// 		pStream.println(ind(3)+"use.setElementList(new List());");
// 		pStream.println(ind(3)+"return use;");
// 		pStream.println(ind(2)+"}");
Anders Nilsson's avatar
Anders Nilsson committed
260
		pStream.println(ind(1)+"}");
Anders Nilsson's avatar
Anders Nilsson committed
261
262
	  

263
		super.genRewrites(pStream);
264
265
		pStream.println("}");
	}
266

267
268
269
	public void OwlClassDecl.genRewrites(PrintStream pStream) {
		String ind = "  ";
		int ix = 0;
270
		// Specialize ComplexElements to the actual class in the ontology
271
		pStream.println(ind(1)+"rewrite ComplexElement {");
272
		pStream.println(ind(2)+"when (!(this instanceof ClassUse) && getOwlIdentifier().getIDENTIFIER().equals(\""+
273
274
						name()+"\") && !(this instanceof Thing))");
		pStream.println(ind(3)+"to "+name()+" {");
275

276
277
278
		pStream.println(ind(3)+name()+" node = new "+name()+"();");
		pStream.println(ind(3)+"node.setOwlIdentifier(getOwlIdentifier());");
		pStream.println(ind(3)+"node.setAttributeList(getAttributeList());");
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
 		pStream.println(ind(3)+"node.setElementList(getElementList());");
// 		Restrictions restr = getRestrictions();
// 		pStream.println(ind(3)+"List l, remain;");
// 		pStream.println(ind(3)+"remain = new List();");
// 		for (int i=0; i<restr.getNumOwlRestriction(); i++) {
// 			OwlRestriction r = restr.getOwlRestriction(i);
// 			pStream.println(ind(3)+"l = new List();");
// 			pStream.println(ind(3)+"for (int i=0; i<getNumElement(); i++) {");
// 			pStream.println(ind(4)+"ComplexElement e = (ComplexElement) getElement(i);");
// 			pStream.println(ind(4)+"if (e.getNumElement() > 0 && e.getElement(0) instanceof "+r.name()+" ) {");
// 			pStream.println(ind(5)+"l.add(e.getElement(0));");
// 			pStream.println(ind(4)+"}");
// 			pStream.println(ind(3)+"}");
// 			if (r.allValuesFrom()) {
// 				pStream.println(ind(3)+"node.set"+r.name()+"List(l);");
// 			} else {
// 				pStream.println(ind(3)+r.name()+" c"+ix+" = new "+r.name()+"();");
// 				pStream.println(ind(3)+"node.set"+r.name()+"(c"+(ix++)+");");
// 			}
// 		}
// 		pStream.println(ind(3)+"for (int i=0; i<getNumElement(); i++) {");
// 		pStream.println(ind(4)+"if (getElement(i) instanceof ValueElement) {");
// 		pStream.println(ind(5)+"remain.add(getElement(i));");
// 		pStream.println(ind(4)+"}");
// 		pStream.println(ind(3)+"}");
//   		pStream.println(ind(3)+"node.setElementList(remain);");
305
306
307
		pStream.println(ind(3)+"return node;");
		pStream.println(ind(2)+"}");
		pStream.println(ind(1)+"}");
Anders Nilsson's avatar
Anders Nilsson committed
308
		pStream.println();
309
310
		// Rearrange device nodes on the AST to get away from the
		// current diagonal style from Protege
Anders Nilsson's avatar
Anders Nilsson committed
311
312
		pStream.println(ind(1)+"rewrite "+name()+" {");
		pStream.println(ind(2)+"when (!isTopElement())");
313
314
315
316
317
		pStream.println(ind(2)+"to ClassUse {");
		pStream.println(ind(3)+"ClassUse use = new ClassUse();");
		pStream.println(ind(3)+"use.setOwlIdentifier(new OwlIdentifier(\""+name()+"\"));");
		pStream.println(ind(3)+"use.setAttributeList(new List().add(new RdfResource(getAttribute(0).getValue())));");
		pStream.println(ind(3)+"use.setElementList(new List());");
Anders Nilsson's avatar
Anders Nilsson committed
318
		pStream.println(ind(3)+"getRdfDecl().addElement(this);");
319
		pStream.println(ind(3)+"return use;");
Anders Nilsson's avatar
Anders Nilsson committed
320
321
		pStream.println(ind(2)+"}");
		pStream.println(ind(1)+"}");
322
	}
Anders Nilsson's avatar
Anders Nilsson committed
323

324
}
325

326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
aspect GenMisc {

    public void ASTNode.genMisc(PrintStream pStream) {
		for (int i=0; i<getNumChild(); i++) {
			getChild(i).genMisc(pStream);
		}
    }

	public void Start.genMisc(PrintStream pStream) {
		pStream.println();
		pStream.println("aspect Misc {");
		pStream.println();
		pStream.println(ind(1)+"String ValueElement.value() {");
		pStream.println(ind(2)+"StringBuffer b = new StringBuffer();");
		pStream.println(ind(2)+"for (int i=0; i<getNumElement(); i++) {");
		pStream.println(ind(3)+"b.append(((SimpleElement) getElement(i)).value());");
		pStream.println(ind(3)+"b.append(\" \");");
		pStream.println(ind(2)+"}");
		pStream.println(ind(2)+"return b.toString().trim();");
		pStream.println(ind(1)+"}");
		pStream.println();
Anders Nilsson's avatar
Anders Nilsson committed
347
348

		// SimpleElement.value()
349
		pStream.println(ind(1)+"syn String SimpleElement.value() = \"\";");
350
351
352
		pStream.println(ind(1)+"eq StringElement.value() = getLITERAL();");
		pStream.println(ind(1)+"eq IntElement.value() = getLITERAL();");
		pStream.println(ind(1)+"eq FloatElement.value() = getLITERAL();");
Anders Nilsson's avatar
Anders Nilsson committed
353
		
Anders Nilsson's avatar
Anders Nilsson committed
354
		// Thing.isTopElement()
Anders Nilsson's avatar
Anders Nilsson committed
355
		pStream.println(ind(1)+"boolean Thing.isTopElement() {");
Anders Nilsson's avatar
Anders Nilsson committed
356
		pStream.println(ind(2)+"return getParent().getParent() instanceof RdfDeclaration;");
Anders Nilsson's avatar
Anders Nilsson committed
357
358
		pStream.println(ind(1)+"}");

Anders Nilsson's avatar
Anders Nilsson committed
359
		// ASTNode.getStart()
Anders Nilsson's avatar
Anders Nilsson committed
360
361
362
363
364
365
366
		pStream.println(ind(1)+"Start ASTNode.getStart() {");
		pStream.println(ind(2)+"return getParent().getStart();");
		pStream.println(ind(1)+"}");
		pStream.println(ind(1)+"Start Start.getStart() {");
		pStream.println(ind(2)+"return this;");
		pStream.println(ind(1)+"}");
		
Anders Nilsson's avatar
Anders Nilsson committed
367
368
369
370
371
372
373
374
		// ASTNode.getRdfDecl()
		pStream.println(ind(1)+"Start ASTNode.getRdfDecl() {");
		pStream.println(ind(2)+"return getParent().getRdfDecl();");
		pStream.println(ind(1)+"}");
		pStream.println(ind(1)+"RdfDeclaration RdfDeclaration.getRdfDecl() {");
		pStream.println(ind(2)+"return this;");
		pStream.println(ind(1)+"}");
		
Anders Nilsson's avatar
Anders Nilsson committed
375
		// ComplexElement.name()
376
		pStream.println(ind(1)+"public String ComplexElement.name() {");
377
378
		pStream.println(ind(2)+"return getOwlIdentifier().getIDENTIFIER();");
		pStream.println(ind(1)+"}");
379
		pStream.println(ind(1)+"public String Attribute.name() {");
Anders Nilsson's avatar
Anders Nilsson committed
380
381
		pStream.println(ind(2)+"return getValue().getSTRING_LITERAL();");
		pStream.println(ind(1)+"}");
382

Anders Nilsson's avatar
Anders Nilsson committed
383
		// ClassUse.decl()
Anders Nilsson's avatar
Anders Nilsson committed
384
385
386
// 		pStream.println(ind(1)+"syn lazy Thing ClassUse.decl() {");
// 		pStream.println(ind(2)+
// 		pStream.println(ind(1)+"}\n");
Anders Nilsson's avatar
Anders Nilsson committed
387

388
389
390
391
392
		super.genMisc(pStream);
		pStream.println("}");
	}

}
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435

aspect ParserGen {
	public void Start.genParser(PrintStream pStream) {
		pStream.println("import java.io.FileNotFoundException;");
		pStream.println("import java.io.FileReader;");
		pStream.println("import java.io.InputStreamReader;");
		pStream.println("import java.io.Reader;");
		pStream.println("");
		pStream.println("import AST.SiarasParser;");
		pStream.println("import AST.ParseException;");
		pStream.println("import AST.Start;");
		pStream.println("");
		pStream.println("public class Parser {");
		pStream.println();
		pStream.println("	protected static Start parse(String args[]) {");
		pStream.println("		Reader r = getReader(args);");
		pStream.println("		Start ast = null;");
		pStream.println("		try {");
		pStream.println("			SiarasParser parser = new SiarasParser(r);");
		pStream.println();
		pStream.println("			ast = parser.Start();");
		pStream.println("		} catch (ParseException e) {");
		pStream.println("			System.out.println(e.getMessage());");
		pStream.println("		}");
		pStream.println("		return ast;");
		pStream.println("	}");
		pStream.println();
		pStream.println("	private static Reader getReader(String[] args) {");
		pStream.println("		Reader r = null;");
		pStream.println("		if (args.length != 1) {");
		pStream.println("			r = new InputStreamReader(System.in);");
		pStream.println("		} else {");
		pStream.println("			try {");
		pStream.println("				r = new FileReader(args[0]);");
		pStream.println("			} catch (FileNotFoundException e1) {");
		pStream.println("				System.err.println(\"Dumper: file \" + args[0] + \" not found\");");
		pStream.println("			}");
		pStream.println("		}");
		pStream.println("		return r;");
		pStream.println("	}");
		pStream.println("}");
	}
}