【问题标题】:Antlr undefined import in Antlrworks using composite grammars使用复合语法在 Antlrworks 中的 Antlr 未定义导入
【发布时间】:2011-02-24 23:19:31
【问题描述】:

我正在尝试在 Antlr 3.1 和 Antlrworks 1.4.2 中使用复合语法。当我将导入语句放入时,它会显示“未定义导入”。我尝试了许多不同的词法分析器语法和解析器语法组合,但无法让它生成代码。我错过了一些明显的东西吗?我的例子如下。

grammar Tokens;

TOKEN   :   'token';

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

rule    :   TOKEN+;

我正在参考来自

的文档

http://www.antlr.org/wiki/display/ANTLR3/Composite+Grammars

谢谢

【问题讨论】:

    标签: antlr


    【解决方案1】:

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

    试试:

    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 { ... },否则您可能会遇到奇怪的错误。

    【讨论】:

      【解决方案2】:

      Argghh 这有点愚蠢。 Antlrworks 将在导入下划线并将所有标记突出显示为未定义的语法错误,但如果您尝试,仍然允许您生成代码!

      第一次无法正常工作的原因是,根据 Bart 的建议,导入超出了选项。

      【讨论】:

      • :) 是的,ANTLRWorks 是一个很棒的工具,但只适用于相当小的组合语法。
      • Richard,请注意,这些部分的顺序可能会在 ANTLR v4 中消失(尽管可能需要一些时间才能出来......)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多