package jplag.csharp; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import jplag.StrippedProgram; import jplag.Structure; import jplag.UnicodeReader; import jplag.csharp.grammar.CSharpLexer; import jplag.csharp.grammar.CSharpParser; public class Parser extends jplag.Parser implements CSharpTokenConstants { private Structure struct; private String currentFile; public static void main(String args[]) { if (args.length != 1) { System.out.println("Only one parameter allowed."); System.exit(-1); } Parser parser = new Parser(); parser.setProgram(new StrippedProgram()); jplag.Structure struct = parser.parse(new File(args[0]).getParentFile(), new String[] { new File(args[0]).getName() }); try { BufferedReader reader = new BufferedReader(new FileReader(new File(args[0]))); int lineNr = 1; int token = 0; String line; while ((line = reader.readLine()) != null) { if (token < struct.size()) { boolean first = true; while (struct.tokens[token] != null && struct.tokens[token].getLine() == lineNr) { if (!first) System.out.println(); jplag.Token tok = struct.tokens[token]; System.out.print(CSharpToken.type2string(tok.type) + " (" + tok.getLine() + "," + tok.getColumn() + "," + tok.getLength() + ")\t"); first = false; token++; } if (first) System.out.print(" \t"); } else System.out.print(" \t"); System.out.println(line); lineNr++; } reader.close(); } catch (IOException e) { System.out.println(e); } } public jplag.Structure parse(File dir, String files[]) { struct = new Structure(); errors = 0; for (int i = 0; i < files.length; i++) { // getProgram().print(null, "Parsing file " + files[i] + "\n"); if (!parseFile(dir, files[i])) errors++; struct.addToken(new CSharpToken(FILE_END, files[i], -1, -1, -1)); } this.parseEnd(); return struct; } private boolean parseFile(File dir, String file) { try { FileInputStream fis = new FileInputStream(new File(dir, file)); currentFile = file; // Create a scanner that reads from the input stream passed to us CSharpLexer lexer = new CSharpLexer(new UnicodeReader(fis, "ISO-8859-1")); lexer.setFilename(file); lexer.setTabSize(1); // Create a parser that reads from the scanner CSharpParser parser = new CSharpParser(lexer); parser.setFilename(file); parser.parser = this;//Added by emeric 22.01.05 // start parsing at the compilationUnit rule parser.compilation_unit(); // close file fis.close(); } catch (Exception e) { getProgram().addError(" Parsing Error in '" + file + "':\n " + e.toString() + "\n"); return false; } return true; } public void add(int type, antlr.Token tok) { if (tok == null) { System.out.println("tok == null ERROR!"); return; } struct.addToken(new CSharpToken(type, currentFile, tok.getLine(), tok.getColumn(), tok.getText().length())); // System.out.println("type: " + CSharpToken.type2string(type) + // " text: '"+tok.getText()+"'"); } public void add(int type, CSharpParser p) { add(type, p.getLastConsumedToken()); } }