【问题标题】:ANTLR syntax error unexpected token: plusANTLR 语法错误意外令牌:加号
【发布时间】:2011-08-16 04:27:49
【问题描述】:

您好,我的 ANTLR 树语法有一个小问题。我正在使用 ANTLRWorks 1.4。在解析器语法中,我有这样的规则:

declaration
:       'variable' IDENTIFIER ( ',' IDENTIFIER)* ':' TYPE ';'
->    ^('variable' IDENTIFIER TYPE)+

所以我希望每个 IDENTIFIER 有一棵树。

而在树语法中我只剩下重写规则:

declaration
:     ^('variable' IDENTIFIER TYPE)+

但是当我检查语法时,我得到了语法错误意外标记 +。而在树文法中,声明规则的末尾就是这个+号。那么我做错了什么?

解析器语法工作正常并按预期构建 AST 树。我为 C# 生成了词法分析器和解析器,并对其进行了一些输入测试。

【问题讨论】:

    标签: tree grammar antlr3


    【解决方案1】:

    解析源码时:

    variable a, b, c : int;
    

    您正在尝试构建一个如下所示的 AST:

    variable variable variable
        /        |        \
       a         b         c
      /          |          \
    int         int         int
    

    但由于'variable'TYPE 始终是同一个令牌,我认为没有必要创建所有这些重复节点。为什么不这样做:

    declaration
      :  'variable' IDENTIFIER ( ',' IDENTIFIER)* ':' TYPE ';' 
         -> ^('variable' TYPE IDENTIFIER+)
      ;
    

    这将创建一个类似的 AST:

     variable
      / | | \
    int a b  c
    

    ?

    【讨论】:

    • 我试过了,它说决策可以匹配输入,例如使用多种替代方法的变量 1,2
    • 非常感谢,这行得通,(我现在有不同的错误:)他们与此无关..
    • @Vladimir,如果您现在遇到的问题与此问题无关,请随时创建一个新问题。
    猜你喜欢
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 2017-10-07
    相关资源
    最近更新 更多