我是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'
答案 0 :(得分:2)
我不知道为什么你的语法会失败,但它似乎是打破它的第一条规则:
更换:
start
: statement
| statement start
;
语法等效
start
: statement+
;
不会发出错误