Antlr4 在简单语法上找不到任何可行的输入字符串替代方案
Antlr4 doesn't find any viable alternative for an input string on a simple grammar
我是 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'
我想知道是否有人可以帮助我解决这个错误。
我不知道你的语法为什么会失败,但它似乎是打破它的第一条规则:
正在替换:
start
: statement
| statement start
;
语法等价
start
: statement+
;
不发出错误
我是 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'
我想知道是否有人可以帮助我解决这个错误。
我不知道你的语法为什么会失败,但它似乎是打破它的第一条规则:
正在替换:
start
: statement
| statement start
;
语法等价
start
: statement+
;
不发出错误