Antlrworks中使用复合语法的Antlr未定义导入

Antlrworks中使用复合语法的Antlr未定义导入,antlr,Antlr,我尝试将复合语法与AntlR3.1和Antlrworks 1.4.2结合使用。当我把import语句放进去时,它说“undefined import”。我尝试了很多不同的lexer语法和parser语法的组合,但都无法生成代码。我错过了什么明显的东西吗?下面是一个例子 grammar Tokens; TOKEN : 'token'; 我正在引用 感谢在分离词法语法和语法分析器语法时,您需要明确定义它是什么类型的语法 尝试: 以及: 请注意,从组合语法文件Foo.g,lexer和p

我尝试将复合语法与AntlR3.1和Antlrworks 1.4.2结合使用。当我把import语句放进去时,它说“undefined import”。我尝试了很多不同的lexer语法和parser语法的组合,但都无法生成代码。我错过了什么明显的东西吗?下面是一个例子

grammar Tokens;

TOKEN   :   'token';

我正在引用


感谢

在分离词法语法和语法分析器语法时,您需要明确定义它是什么类型的语法

尝试:

以及:

请注意,从组合语法文件
Foo.g
,lexer和parser在默认情况下分别获得
parser
lexer
前缀:
footexer.java
FooParser.java
。但是在“显式”语法中,
.java
文件的名称是语法本身的名称:
Parser.java
Tokens.java
。您可能需要注意调用类
解析器
,因为这是ANTLR的基本解析器类的名称:


还要注意将
import
语句放在
options{…}
部分的下面,但是放在您可能定义的任何
tokens{…}
之前,否则可能会出现奇怪的错误

啊,那是件愚蠢的事。Antlrworks将在导入下面加下划线,并将所有标记作为未定义的语法错误突出显示,但如果您尝试,仍然允许您生成代码


第一次不起作用的原因是,根据巴特的建议,进口超出了选项范围

:)是的,ANTLRWorks是一个很好的工具,但只适用于相当小的组合语法。Richard,请注意,这些部分的顺序可能会在AntlRv4中消失(不过可能还需要一些时间才能出来……)。
grammar Parser;
import Tokens;//gives undefined import error

rule    :   TOKEN+;
parser grammar Parser;
import Tokens;//gives undefined import error

rule    :   TOKEN+;
lexer grammar Tokens;

TOKEN   :   'token';