我正在使用antlr创建DSL。Lexer和Parser写在一个语法文件中(比如layout.g)。树形语法写在另一个语法文件中(比如layouttree.g.)。现在树解析器不能正确解析。我打印了解析器的AST输出,它是正确的。我遍历了生成的树解析器代码,发现标记值声明在树解析器和解析器中分配不同的值。下面是解析器和树解析器的示例输出。
解析器输出
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)有问题吗?这个文件在我的项目中是空的。我如何生成这个文件?
您的树语法中有这样的东西吗?
options
{
tokenVocab=layout; //NOT layout.g or layout.tokens
ASTLabelType=pANTLR3_BASE_TREE;
}