Parser.java 2.3 KB

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