構文木の操作

なんだか昔々の話に戻ったような気もするが、いまさらながらSqueak構文木(ParseNode)をいじる。一つは、Tileから文字列表現を経由することなく一気にParseNodeを生成するというもので、もう一つは、Etoysのタイルで四則演算などを使ったときに、演算の優先順位が常に右結合優先になっていたことの修正である。

前者は、ちゃんとReturnNodeを作っておかないと、code generatorが生成したコードがスタックのバランスをちゃんとキープしなくなるため、ありとあらゆる意味不明なエラーが起こりまくるという問題にしばし悩まされたものの、正しい構文木から生成されたバイトコードを眺め、primitiveを書き間違えたときの症状に似ていることを思いだして解決。後者は、EtoysのTileから作られる式が常に右結合になっていて、それはほとんど直線的であるということから、ParseNodeの要素を操作する演算子順位文法のドライバを30行ほどで書いて、それに適切な木を食わせて変換することによって解決。

後者の問題は、Etoysをある程度使った人が常に驚かされる問題だったので、少なくともOLPCではそういうことはなくなるはずである。