我使用的是Antlr4。这是我的语法:
assign : id '=' expr ;
id : 'A' | 'B' | 'C' ;
expr : expr '+' term
| expr '-' term
| term ;
term : term '*' factor
| term '/' factor
| factor ;
factor : expr '**' factor
| '(' expr ')'
| id ;
WS : [ \t\r\n]+ -> skip ;
我知道这个语法含糊不清,而且我知道我应该在语法中添加一个元素,但我不知道如何使语法明确无误。
答案 0 :(得分:1)
factor : expr '**' factor
考虑输入
A + B ** C
A + B
是expr
,因此我们可以将其分析为factor
,语义为(A+B)C
但另一种更传统的解释(A + (BC)
)也是可能的:
<expr> =>
<expr> + <term> =>
<term> + <term> =>
<factor> + <term> =>
A + <term> =>
A + <factor> =>
A + <expr> ** <factor> =>
A + <term> ** <factor> =>
A + <factor> ** <factor> =>
A + B ** <factor> =>
A + B ** C