在http://pharobooks.gforge.inria.fr/PharoByExampleTwo-Eng/latest/中,定义了ExpressionGrammar。但是,它是右关联的
parser parse: '1 + 2 + 6'. ======> #(1 $+ #(2 $+ 6))
如何将其设为左关联以便
parser parse: '1 + 2 + 6'.
结果
#(#(1 $+ 2) $+ 6)
答案 0 :(得分:7)
对于左关联语法,请使用:
term := (prod sepratedBy: $+ asParser trim) foldLeft: [ :a :op :b |
...
对于右关联语法,请使用:
raise := (prod sepratedBy: $^ asParser trim) foldRight: [ :a :op :b |
...
或者,您可能希望查看PPExpressionParser
,它会自动为您处理所有详细信息。您只需告诉它操作符是左关联,右关联,前缀或后缀运算符。看一下课堂评论,进行深入讨论。
答案 1 :(得分:4)
查看PPExpressionParser类。
它专为此而设计,你在课堂评论中有一个很好的例子