Antlr4没有为简单语法上的输入字符串找到任何可行的替代方法

时间:2015-05-31 11:02:36

标签: java parsing antlr4

我是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'

我会怀疑是否有任何身体帮助我解决这个错误。

1 个答案:

答案 0 :(得分:2)

我不知道为什么你的语法会失败,但它似乎是打破它的第一条规则:

更换:

start
  :   statement 
  |   statement start
  ;

语法等效

start
  :   statement+
  ;

不会发出错误