如何在antlr中从语法文件创建令牌文件

时间:2011-07-25 18:56:15

标签: java antlr antlr3 antlrv3ide

我正在使用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)有问题吗?我的项目中此文件为空。如何生成此文件?

1 个答案:

答案 0 :(得分:0)

你的树语法中有这样的东西吗?

options
{
  tokenVocab=layout; //NOT layout.g or layout.tokens
  ASTLabelType=pANTLR3_BASE_TREE;
}