GoParserAdapter.java 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package de.jplag.golang;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5. import org.antlr.v4.runtime.CharStreams;
  6. import org.antlr.v4.runtime.CommonTokenStream;
  7. import org.antlr.v4.runtime.ParserRuleContext;
  8. import org.antlr.v4.runtime.tree.ParseTree;
  9. import org.antlr.v4.runtime.tree.ParseTreeWalker;
  10. import de.jplag.AbstractParser;
  11. import de.jplag.TokenList;
  12. import de.jplag.golang.grammar.GoLexer;
  13. import de.jplag.golang.grammar.GoParser;
  14. public class GoParserAdapter extends AbstractParser {
  15. private String currentFile;
  16. private TokenList tokens;
  17. public TokenList parse(File directory, String[] fileNames) {
  18. tokens = new TokenList();
  19. for (String file : fileNames) {
  20. if (!parseFile(directory, file)) {
  21. errors++;
  22. }
  23. }
  24. return tokens;
  25. }
  26. private boolean parseFile(File directory, String fileName) {
  27. File file = new File(directory, fileName);
  28. try (FileInputStream inputStream = new FileInputStream(file)) {
  29. currentFile = fileName;
  30. GoLexer lexer = new GoLexer(CharStreams.fromStream(inputStream));
  31. CommonTokenStream tokenStream = new CommonTokenStream(lexer);
  32. GoParser parser = new GoParser(tokenStream);
  33. ParserRuleContext entryContext = parser.sourceFile();
  34. ParseTreeWalker treeWalker = new ParseTreeWalker();
  35. JPlagGoListener listener = new JPlagGoListener(this);
  36. for (int i = 0; i < entryContext.getChildCount(); i++) {
  37. ParseTree parseTree = entryContext.getChild(i);
  38. treeWalker.walk(listener, parseTree);
  39. }
  40. } catch (IOException exception) {
  41. logger.error("Parsing Error in '%s':".formatted(fileName), exception);
  42. return false;
  43. }
  44. return true;
  45. }
  46. public void addToken(int tokenType, int line, int column, int length) {
  47. tokens.addToken(new GoToken(tokenType, currentFile, line, column, length));
  48. }
  49. }