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

时间:2011-02-24 23:19:31

标签: antlr

我正在尝试使用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

由于

2 个答案:

答案 0 :(得分:3)

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

尝试:

parser grammar Parser;
import Tokens;//gives undefined import error

rule    :   TOKEN+;

lexer grammar Tokens;

TOKEN   :   'token';

请注意,在组合语法文件Foo.g中,词法分析器和解析器默认情况下会获得ParserLexer前缀:FooLexer.javaFooParser.java。但在“显式”语法中,.java文件的名称是语法本身的名称:Parser.javaTokens.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将强调导入并将所有标记突出显示为未定义的语法错误,但仍允许您在尝试时生成代码!

第一次没有工作的原因是根据巴特的建议,进口超出了选项。