ANTLR输入不匹配,即使规则定义(奇怪的行为)

时间:2018-06-18 11:09:35

标签: antlr4

我们假设我有这个语法(我的实际语法的较短版本):

expr: prefixOp expr                 #prefixExpr
    | expr multOp expr              #multExpr
    | expr plusOp expr              #plusExpr
    | expr compOp expr              #compExpr
    | expr boolOp expr              #boolExpr
    | STR                           #stringExpr
    | LPAR expr RPAR                #parExpr
    | identifier                    #idExpr
    | NUM                           #numExpr
    | TRUE                          #trueExpr
    | FALSE                         #falseExpr
    | LSBRACK listContent RSBRACK   #listExpr
    ;

identifier: identifier COLON identifier 
          | SELF
          | ID LPAR expr RPAR
          | ID LSBRACK expr RSBRACK
          | ID 
          ; 

假设以下令牌:

LPAR = '('
RPAR = ')'
LSBRACK = '['
RSBRACK = ']'
COLON = ':'

我尝试在identifier中解析以下代码块:

functionA(exprA)

我收到以下错误:

  

language :: identifier:1:3:输入不匹配'('期待{EOF,':'}

enter image description here

但是,如果我解析以下标识符:

functionA(exprA):functionB

它正确解析代码..

看起来它在LPAR和RPAR上尤其出错,因为如果我要解析:

a[1]

它正确解析。

我做错了什么?

enter image description here

0 个答案:

没有答案