我正在尝试使用Antlr 3.1和Antlrworks 1.4.2的复合语法。当我输入import语句时,它会显示'undefined import'。我已经尝试了许多不同的词法分析器语法和解析器语法的组合,但无法让它生成代码。我错过了一些明显的东西吗我的例子如下。
grammar Tokens;
TOKEN : 'token';
grammar Parser;
import Tokens;//gives undefined import error
rule : TOKEN+;
我正在引用
中的文档http://www.antlr.org/wiki/display/ANTLR3/Composite+Grammars
由于
答案 0 :(得分:3)
分离词法分析器和解析器语法时,需要明确定义它是什么类型的语法。
尝试:
parser grammar Parser;
import Tokens;//gives undefined import error
rule : TOKEN+;
和
lexer grammar Tokens;
TOKEN : 'token';
请注意,在组合语法文件Foo.g
中,词法分析器和解析器默认情况下会获得Parser
和Lexer
前缀:FooLexer.java
和FooParser.java
。但在“显式”语法中,.java
文件的名称是语法本身的名称:Parser.java
和Tokens.java
。您可能需要注意调用类Parser
,因为这是ANTLR的基本解析器类的名称:
http://www.antlr.org/api/Java/classorg_1_1antlr_1_1runtime_1_1_parser.html
另请注意将import
语句放在options { ... }
部分下方,但之前您可能已定义的任何tokens { ... }
,否则您可能会遇到奇怪的错误。
答案 1 :(得分:2)
Argghh这是一个愚蠢的事情。 Antlrworks将强调导入并将所有标记突出显示为未定义的语法错误,但仍允许您在尝试时生成代码!
第一次没有工作的原因是根据巴特的建议,进口超出了选项。