我使用 fsyacc(用于 fsharp 的 yacc)来编写一个小型解析器。语法类似于
Expr:=
| INT { Cst $1 }
| Expr PLUS Expr { Op("+", $1, $3) }
| Expr TIMES Expr { Op("*", $1, $3) }
然后,在没有声明优先级或关联性的情况下,我将“1 * 2 + 3”解析为
Op ("*",Cst 1,Op ("+",Cst 2,Cst 3)
为什么?