0

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

4

1 回答 1

0

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

options
{
  tokenVocab=layout; //NOT layout.g or layout.tokens
  ASTLabelType=pANTLR3_BASE_TREE;
}
于 2011-07-25T22:03:41.890 回答