package jplag.java15;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import jplag.java15.grammar.JavaParser;
import jplag.java15.grammar.Token;
public class Parser extends jplag.Parser implements JavaTokenConstants {
private String actFile;
private boolean useMethodSeparators;
private jplag.Structure struct;
public Parser(boolean useMethodSeparators) {
this.useMethodSeparators = useMethodSeparators;
}
public static void main(String args[]) {
if (args.length != 1) {
System.out.println("Only one parameter allowed.");
System.exit(-1);
}
Parser parser = new Parser(true);
parser.setProgram(new jplag.StrippedProgram());
jplag.Structure struct = parser.parse(null, args);
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();
}
JavaToken tok = (JavaToken) struct.tokens[token];
System.out.print(JavaToken.type2string(tok.type) + " (" + tok.getLine() + "," + tok.getColumn() + ","
+ tok.getLength() + ")\t");
first = false;
token++;
}
if (first)
System.out.print(" \t");
}
System.out.println(line);
lineNr++;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public jplag.Structure parse(File dir, String files[]) {
struct = new jplag.Structure();
errors = 0;
JavaParser parser = null; // This will be (re)initialised in parseFile()
for (int i = 0; i < files.length; i++) {
actFile = files[i];
getProgram().print(null, "Parsing file " + files[i] + "\n");
if (!JavaParser.parseFile(dir, files[i], parser, this))
errors++;
struct.addToken(new JavaToken(FILE_END, actFile, -1, -1, -1));
}
this.parseEnd();
return struct;
}
public void add(int type, Token token) {
if (type == SEPARATOR_TOKEN && !useMethodSeparators)
return;
JavaToken tok = new JavaToken(type, actFile, token.beginLine, token.beginColumn, token.image.length());
struct.addToken(tok);
/*
* getProgram().print(null,token.beginLine+"\t"+
* JavaToken.type2string(type)+"\t"+ token.image);
*/
}
}