我是Antlr的新手,我必须创建一些语法来解析由用户在我的项目中指定的规则和公式。我已经编写了包含条件语句的最难的语句,但是对于第二个比第一个语句更容易的语句,对于输入,我没有可行的替代方法。我的语法是一个简单的语法,如下所示:
grammar PmntIdntfrTmpExp;
start
: statement
| statement start
;
statement
: assignment
;
assignment
: id '=' addStmt
;
addStmt
: addStmt '+' mulStmt
| addStmt '-' mulStmt
| mulStmt
;
mulStmt
: mulStmt '*' terminal
| mulStmt '/' terminal
| mulStmt '^' terminal
| terminal
;
terminal
: '('addStmt')'
| id
| number
;
id
: '@fild'(Digit)+
;
number
: Digit+ ('.' Digit+)?
;
Digit
: '0'..'9'
;
WS
: [ \t\r\n]+ -> skip
;但是当我想解析一个像下面的赋值这样的简单字符串时
@fild76 = @fild12 + @fild43我想出了这个错误
line 1:27 no viable alternative at input '@fild76=@fild12+@fild43'我想知道有没有人帮我解决这个错误。
发布于 2015-05-31 16:14:21
我不知道你的语法为什么会失败,但这似乎是打破语法的第一条规则:
取代:
start
: statement
| statement start
;在语法上等价
start
: statement+
;不会发出错误。
https://stackoverflow.com/questions/30556633
复制相似问题