新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

fucc と LL(1) と SICP

fucc で LL(1) の構文解析が出来るようになった。今後は LL と LR の違いをじっくり堪能することになるだろう。最近の時代の流れは LL のようだ。さて、lisper にとって LL とか LR とかって意味があるのだろうか?Lisp ではプログラマ自身が構文解析をしてしまって(おっノー)Lisp に与えてあげる。もうその時点で構文木が出来てしまっているのだ。だから SICP では構文解析の為の構文木の構築なんてなくて、いきなり schemeインタプリターを書いているわけだ。
再帰下降しているから LL かな?define は define だけでは構文が一意に決まらないから2つ先読みが必要。LL(2) か?しかし、構文解析がすでに出来てしまっているから、左という意味は無いな、、、
fucc で LL あるいは LR を解析できるが、それって lisper にとっては冗長だなぁ。fucc で単純に S 式への変換。そしてそのS式に対して、構文とアクション(fucc では :do)からなるインタプリターを構築してやればいい。バーチャルマシンもかけるとなお良い。
lisper じゃ無い人は、ある構文にしたがって fucc を使いプログラムする。lisper の人はいちいち、その構文を覚えるのはめんどうなので、直接もう lisp で書いてしまう。
構文解析と S 式とインタプリターの関係がだんだん自分の中で整理されてきた。