书籍名称:The definitive ANTLR 4 Reference
章节:Chapter4 A quick tour
ANTLR解析的模版
g4文件中这样定义可以在生成的java文件中创造出常量MUL
使用vistor手动遍历
使用Listener
还可以深度自定义
public static void main(String[] args) throws IOException {
String inputFile = null;
if (args.length > 0){
inputFile = args[0];
}
InputStream is = System.in;
if(inputFile!=null){
is = new FileInputStream(inputFile);
}
ANTLRInputStream input = new ANTLRInputStream(is);
ExprLexer lexer = new ExprLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
ExprParser parser = new ExprParser(tokens);
ParseTree tree = parser.prog();
System.out.println(tree.toStringTree(parser));
}
词法解析和语法解析可以拆分成两个文件,使用idea插件生成只需要先生成词法再生成语法就可以。
ANTLR中//是注释,#是加标签,没有标签ANTLR默认只为一个rule创建一个vistor
MUL : '*' ;
使用vistor需要继承xxxBaseVistor类
ParseTree tree = parser.prog();
xxxVisitor vistor = new xxxVisitor();
vistor.visit(tree);
使用listener需要继承xxxBaseListenre类
ParseTreeWalker walker = new ParseTreeWalker(); // create standard walker
xxxListener listener = new xxxListener(parser);
walker.walk(listener, tree); // initiate walk of tree with listener
需要在g4文件中定义,我目前用应该用不着,很复杂
@parser::members { // add members to generated RowsParser int col;
public RowsParser(TokenStream input, int col) { // custom constructor this(input);
this.col = col;
}
}
ANTLR4使用还是很简单的,生成了代码之后使用继承vistor和listener就可以,深入的学习目前用不到,等需要定制开发语言再继续学习。