我正在使用antlr创建DSL。 Lexer和Parser用一个语法文件(比如layout.g)编写。树语法是用另一个语法文件(比如layoutTree.g)编写的。现在Tree解析器没有正确解析。我从解析器打印AST输出,它是正确的。我浏览了生成的树解析器代码,发现令牌值声明在树解析器和解析器中分配了不同的值.Below是解析器和树解析器的示例输出。
解析器输出
public static final int ARRAY_MEMBER_TOKEN=4;
public static final int ARRAY_TOKEN=5;
public static final int DECLARATION_TOKEN=6;
树分析器输出
public static final int EOF=-1;
public static final int DECLARATION_TOKEN=4;
public static final int IDENTIFIER=5;
如您所见,DECLARATION_TOKEN在解析器输出和树解析器输出中具有不同的值。因为这个树解析器没有按预期工作。我怎么能纠正这个问题?
生成的令牌文件(比如layout.token)有问题吗?我的项目中此文件为空。如何生成此文件?
答案 0 :(得分:0)
你的树语法中有这样的东西吗?
options
{
tokenVocab=layout; //NOT layout.g or layout.tokens
ASTLabelType=pANTLR3_BASE_TREE;
}