5

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)

?

4

2 に答える 2

7

左連想文法の場合:

term := (prod sepratedBy: $+ asParser trim) foldLeft: [ :a :op :b |

...]

右連想文法では、次を使用します。

raise := (prod sepratedBy: $^ asParser trim) foldRight: [ :a :op :b |

...]

またはPPExpressionParser、すべての詳細を自動的に処理する を参照することもできます。左結合演算子、右結合演算子、前置演算子、または後置演算子を指定するだけです。詳細な議論については、クラスのコメントをご覧ください。

于 2013-01-28T14:24:30.577 に答える
4

PPExpressionParser クラスを見てください。

そのために設計されており、クラスのコメントに素晴らしい例があります

于 2013-01-28T13:38:33.790 に答える