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+
  ;

不发出错误