これって頭の中でどうやって解釈するんだろうね

例えば

Prog ::= <Expr>
Expr ::= <Expr>:l '+' <Term>:r -> { l + r }
       | <Term>
Term ::= <Term>:l '*' <Fact>:r -> { l * r }
       | <Fact>
Fact ::= Int

とかこんなのに対して input:1+2+3*4+5とか来た時に構文木を作ろうとすると。


私はこの手の場合っていつも頭の中ではLLじゃなくてLRで考えてしまうんだけど、スマートにLLで考えるとしたらどうしたら良いんだろう。とか。


ああ普通に出来てたや。スマートじゃない気もするけど。

つまり

入力はProg = Exprであってほしいので、取りあえず最初に Expr + Termで在ると良いなとか考える。んですると

Expr =        +
            /   \
         Expr1 Term1

とかになる。ここでExpr1が1+2+3*4でTerm1が5だとかで、そんな感じで再帰的にやっていくとちゃんと左成長の構文木が出来るよねということで。

あと考えたりするのは

ASTはPyPCASTLやる時にちょっと考えたりしたけど、あの辺とかもそれなりに調べれば面白そうな事が転がっているのかもしれないのかしらとかは思った。


めぞん一刻見たい。