如何使用antlr在java中获取.txt输入文件的解析树

ut6juiuv  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(447)

我从学校得到了这个演示代码,它应该给我看一个解析树。在我生成解析器并在该类中测试规则之后,我应该运行java类,但我似乎没有得到解析器树。有人知道我做错了什么吗?


以及java文件中的代码
桃金娘

import java.io.IOException;

import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.ParseTree;

/**
 * Antlr Java Parser Demo: read a Java file and print methods found by visiting the parse tree.
 * Don't forget to generate ANTLR Java parser class files first!
 */
public class MyAntlrDemo extends Java8ParserBaseVisitor<Void> {
    /**
     * Main Method
     */
    public static void main(String[] args) throws IOException {
        //String file = "./src/MyAntlrDemo.java"; // input this source  file
        String file = "./exampleJava.txt";  // a shorter Java example input

        CharStream chars = CharStreams.fromFileName(file);
        Java8Lexer lexer = new Java8Lexer(chars);
        CommonTokenStream tokens = new CommonTokenStream(lexer); // lexer converts text to tokens
        Java8Parser parser = new Java8Parser(tokens);
        ParseTree tree = parser.compilationUnit(); // create tree from staring rule: compilationunit
        System.out.println("Number of syntax errors found: " + parser.getNumberOfSyntaxErrors());
        // walk the tree and do something with it
        MyAntlrDemo visitor = new MyAntlrDemo(); // extends JavaBaseVisitor<Void>
        System.out.println("STARTING VISIT");
        visitor.visit(tree); // calls visitCompilationUnit and other overridden methods below
    }

    @Override
    public Void visitCompilationUnit(Java8Parser.CompilationUnitContext ctx) {
        System.out.println("Inside visitCompilationUnit");
        return visitChildren(ctx);
    }

    @Override
    public Void visitMethodDeclaration(Java8Parser.MethodDeclarationContext ctx) {
        System.out.println("found method:" + ctx.getText());
        System.out.println("Methodname: " + ctx.methodHeader().methodDeclarator().Identifier().getText());
        return super.visitMethodDeclaration(ctx);
    }

}

还有.txt文件
示例java.txt

class Jan {
  private int foo; // comment
  public Jan() { }
  public int eenMethode(){
    return foo * 2;
  }
}

输出消息:

antlr预览:

4ktjp1zp

4ktjp1zp1#

您必须更改上一个图像中的选项,或者将代码粘贴到antlr preview中
检查示例并查看右侧部分中的解析树之后,您必须右键单击file=>“configure antlr”=>set generated path=>set generated directory=>save
在文件中单击鼠标右键=>“生成antlr识别器”
包含在解析树中的生成文件将位于您选择的生成目录中

相关问题