| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- package de.jplag.golang;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import org.antlr.v4.runtime.CharStreams;
- import org.antlr.v4.runtime.CommonTokenStream;
- import org.antlr.v4.runtime.ParserRuleContext;
- import org.antlr.v4.runtime.tree.ParseTree;
- import org.antlr.v4.runtime.tree.ParseTreeWalker;
- import de.jplag.AbstractParser;
- import de.jplag.TokenList;
- import de.jplag.golang.grammar.GoLexer;
- import de.jplag.golang.grammar.GoParser;
- public class GoParserAdapter extends AbstractParser {
- private String currentFile;
- private TokenList tokens;
- public TokenList parse(File directory, String[] fileNames) {
- tokens = new TokenList();
- for (String file : fileNames) {
- if (!parseFile(directory, file)) {
- errors++;
- }
- }
- return tokens;
- }
- private boolean parseFile(File directory, String fileName) {
- File file = new File(directory, fileName);
- try (FileInputStream inputStream = new FileInputStream(file)) {
- currentFile = fileName;
- GoLexer lexer = new GoLexer(CharStreams.fromStream(inputStream));
- CommonTokenStream tokenStream = new CommonTokenStream(lexer);
- GoParser parser = new GoParser(tokenStream);
- ParserRuleContext entryContext = parser.sourceFile();
- ParseTreeWalker treeWalker = new ParseTreeWalker();
- JPlagGoListener listener = new JPlagGoListener(this);
- for (int i = 0; i < entryContext.getChildCount(); i++) {
- ParseTree parseTree = entryContext.getChild(i);
- treeWalker.walk(listener, parseTree);
- }
- } catch (IOException exception) {
- logger.error("Parsing Error in '%s':".formatted(fileName), exception);
- return false;
- }
- return true;
- }
- public void addToken(int tokenType, int line, int column, int length) {
- tokens.addToken(new GoToken(tokenType, currentFile, line, column, length));
- }
- }
|