Parser.java 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package de.jplag.csharp;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.nio.charset.StandardCharsets;
  5. import antlr.Token;
  6. import de.jplag.AbstractParser;
  7. import de.jplag.TokenList;
  8. import de.jplag.csharp.grammar.CSharpLexer;
  9. import de.jplag.csharp.grammar.CSharpParser;
  10. public class Parser extends AbstractParser {
  11. private TokenList tokens;
  12. private String currentFile;
  13. public TokenList parse(File directory, String[] files) {
  14. tokens = new TokenList();
  15. errors = 0;
  16. for (int i = 0; i < files.length; i++) {
  17. if (!parseFile(directory, files[i]))
  18. errors++;
  19. tokens.addToken(new CSharpToken(CSharpTokenConstants.FILE_END, files[i], -1, -1, -1));
  20. }
  21. this.parseEnd();
  22. return tokens;
  23. }
  24. private boolean parseFile(File dir, String file) {
  25. try {
  26. FileInputStream input = new FileInputStream(new File(dir, file));
  27. currentFile = file;
  28. // Create a scanner that reads from the input stream passed to us
  29. CSharpLexer lexer = new CSharpLexer(new UnicodeReader(input, StandardCharsets.UTF_8));
  30. lexer.setFilename(file);
  31. lexer.setTabSize(1);
  32. // Create a parser that reads from the scanner
  33. CSharpParser parser = new CSharpParser(lexer);
  34. parser.setFilename(file);
  35. parser.parser = this;// Added by emeric 22.01.05
  36. // start parsing at the compilationUnit rule
  37. parser.compilation_unit();
  38. // close file
  39. input.close();
  40. } catch (Exception e) {
  41. getErrorConsumer().addError(" Parsing Error in '" + file + "':\n " + e.toString());
  42. return false;
  43. }
  44. return true;
  45. }
  46. private void add(int type, Token token) {
  47. if (token == null) {
  48. System.out.println("tok == null ERROR!");
  49. return;
  50. }
  51. tokens.addToken(new CSharpToken(type, currentFile, token.getLine(), token.getColumn(), token.getText().length()));
  52. }
  53. public void add(int type, CSharpParser parser) {
  54. add(type, parser.getLastConsumedToken());
  55. }
  56. }