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

Java 如何从antlr中的语法文件创建令牌文件,java,antlr,antlr3,antlrv3ide,Java,Antlr,Antlr3,Antlrv3ide,我正在使用antlr创建DSL。Lexer和Parser写在一个语法文件中(比如layout.g)。树语法写在另一个语法文件中(比如layoutTree.g)。现在树解析器没有正确解析。我打印了解析器的AST输出,它是正确的。我浏览了生成的树解析器代码,发现令牌值声明在树解析器和树解析器中分配了不同的值 解析器输出 树解析器输出 正如您所看到的,声明_标记在解析器输出和树解析器输出中具有不同的值。由于此树解析器未按预期工作。如何更正此问题 生成的令牌文件(比如layout.token)有问题吗?

我正在使用antlr创建DSL。Lexer和Parser写在一个语法文件中(比如layout.g)。树语法写在另一个语法文件中(比如layoutTree.g)。现在树解析器没有正确解析。我打印了解析器的AST输出,它是正确的。我浏览了生成的树解析器代码,发现令牌值声明在树解析器和树解析器中分配了不同的值

解析器输出

树解析器输出

正如您所看到的,声明_标记在解析器输出和树解析器输出中具有不同的值。由于此树解析器未按预期工作。如何更正此问题


生成的令牌文件(比如layout.token)有问题吗?此文件在我的项目中为空。如何生成此文件?

在树语法中是否有类似的内容

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

生成lexer/parser时会自动生成
.tokens
文件。您的
.tokens
文件为空这一事实并不好。您如何生成lexer/parser?(命令行、IDE、ANTLRWorks、其他?)我使用sourceforge.net中的“antlrv3ide”。我已从“”安装它。如何使用命令行生成它?在命令行上,执行:
java-cp-antlr-3.2.jar org.antlr.Tool layout.g
然后
java-cp-antlr-3.2.jar org.antlr.Tool layoutTree.g
I have ASTLabelType=CommonTree;在我的语法分析器中,对不起,我错过了tokenVocab=layout;在上面的注释中,我在树语法中有选项{language=Java;tokenVocab=layout;ASTLabelType=CommonTree;}
public static final int EOF=-1;
public static final int DECLARATION_TOKEN=4;
public static final int IDENTIFIER=5;
options
{
  tokenVocab=layout; //NOT layout.g or layout.tokens
  ASTLabelType=pANTLR3_BASE_TREE;
}