antrl生成的语法分析器和java的集成(visitor)

使用简单的方法调用antrl的语法分析器。

import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.tree.ParseTree;

.....

public static String praseAS3(String fileName) throws IOException{
        //创建一个新的CharStream,从文件中读取输入数据
        CharStream inputStream = CharStreams.fromFileName(fileName, Charset.forName("UTF-8"));

        //新建一个词法分析器,处理输入的CharStream
        //ActionScript3Lexer 是词法分析G4文件的产物
        ActionScript3Lexer lexer = new ActionScript3Lexer(inputStream);
        
        //新建一个词法符号缓冲区,用于存储词法分析器将生成的词法符号
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        
        //新建一个语法分析器,处理词法符号缓冲区中的内容
        //ActionScript3r 是语法分析G4文件的产物
        ActionScript3 parser = new ActionScript3(tokens);

        //以树上的节点【compilationUnit】作为根节点,自上而下进行分析。
        ParseTree tree = parser.compilationUnit();

        //用LISP风格打印生成树
        System.out.println(tree.toStringTree(parser));

        //Visit的实现类
        VisitorImpl visitor = new VisitorImpl();
        //根节点传入visit进行遍历
        String outString =visitor.visit(tree);
        return outString;
    }
发布了4 篇原创文章 · 获赞 0 · 访问量 18

猜你喜欢

转载自blog.csdn.net/m0_37727363/article/details/105708314