2017-02-22 91 views
0

我使用ANTLR4建立AST树,我下载G4文件来自:https://github.com/antlr/grammars-v4/tree/master/sqlite 添加选项G4文件的头:ANTLR4不支持ASTLabelType吗?

options{ 
    output=AST; 
    ASTLabelType=CommonTree; 
    language=Java; 
} 

但同时编译G4文件时,它的输出:

ANTLR Tool v4.6 (D:\antlr-4.6-complete.jar) 
SQLite.g4 -o C:\Users\macro\workspace\tdsql\target\generated-sources\antlr4 -listener -no-visitor -encoding UTF-8 
warning(83): SQLite.g4:34:4: unsupported option output 
warning(83): SQLite.g4:35:4: unsupported option ASTLabelType 

antlr4不支持使用ASTLabelType来构建AST树吗?以及如何使用antlr4构建AST树?

回答

1

我是Antlr的新手,所以有更好的人可以回答这个问题。也就是说,AST输出选项在Antlr3和Antlr4之间已弃用。 Antlr3会生成一个AST,但Antlr4不会。

您在Antlr4中的选择是使用Listener模式(用于遍历解析树)或访问者模式(访问&评估节点)。可以在运行Lexer和Parser之后使用这两者中的任何一个,或者两者兼有。

有一些可以通过一些搜索找到的例子。这是Visitor pattern的一个。此页compares Listeners and Visitors