我们假设我有这个语法(我的实际语法的较短版本):
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,':'}
但是,如果我解析以下标识符:
functionA(exprA):functionB
它正确解析代码..
看起来它在LPAR和RPAR上尤其出错,因为如果我要解析:
a[1]
它正确解析。
我做错了什么?