在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)发布于 2013-01-28 22:24:31
对于左联想语法,请使用:
term := (prod sepratedBy: $+ asParser trim) foldLeft: [ :a :op :b |...]
对于正确的联想语法,请使用:
raise := (prod sepratedBy: $^ asParser trim) foldRight: [ :a :op :b |...]
或者,您可能想要查看PPExpressionParser,它会自动为您处理所有细节。您只需告诉它哪些运算符是左关联、右关联、前缀或后缀运算符。请看一下课堂评论以进行深入的讨论。
发布于 2013-01-28 21:38:34
看看PPExpressionParser类。
它就是为此而设计的,在class注释中有一个很好的例子
https://stackoverflow.com/questions/14563188
复制相似问题