このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

構文糖衣の実現方法

Erlangにパーズトランスフォームってのがあったけど、あんな感じだろうな。プログラミング言語であれば、そのプログラミング言語でパーズトランスフォームを書けたらいいが、専用構文のほうが可搬性はあるかもしれない。

いずれにしても、入力構文の適当なタイミングでトランスフォームスクリプト(糖衣デコードスクリプト=デシュガー・スクリプト)を起動しなくてはならない。となると、パーザーは、現在の記法スコープを意識できないとダメ。記法スコープは、構文的ブロックスコープとは違う。実行時の名前空間構造を見ないとわからない。

したがって、パーザーは名前空間を作りながら動くことになる。パーザーは、名前空間グラフと構文解析木の両方を見ながら解析を進めるわけだ。記法スコープは、構文解析木を見ても分からず、その時点の名前空間グラフから判断する。

名前空間グラフに対するCSSセレクターみたいなもので記法スコープを認識(マッチング)して、マッチしたデシュガースクリプトを適用する。デシュガー・スクリプトは、トークンストリームに対するパイプライン・フィルターとして実装すればよさそう。