復讐、いや復習のため再び構文解析法についてメモリます。
一番柔軟性がある
LR構文解析法は、複雑なので当時実用的な高率で実現できるとは考えられていませんでした。それ故、LR構文解析法に制限を加えた
SLR構文解析法や
LALR構文解析法が考えだされました。LR構文解析法の基本動作は共通で
移動還元構文解析の一種で、スタックに文法記号のほかに状態記号も格納するのが特徴です。なお、演算子順構文解析法も移動還元構文解析の一種です。
LR構文解析法は
解析表としてactionとgotoを使用します。actionは、どのように
生成規則で還元するかシフトしながら状態が移り変わるのかを表すものです。ただし、
受理されない時もあります。
goto表は還元された時に参照され、
還元を行った語の状態を表します。すなわち、受理される可能性がある時は状態を変え、受理されなかった時は誤りとするオートマトンであると言えると思います。
なお、SLR構文解析法とLALR構文解析法は、LR構文解析法が使うものよりも
構文解析表を単純化した方法です。どうやらLR構文解析法は当時のハードウェアのスペックを考慮して作られたもののようです。
こうやって、LR構文解析法を纏めてみると、
英語の文法を基にしたものであると感じました。何故ならば、順番が定まっている処理方法だからです。しかし、日本語文法では単語の並びが自由です。という事は、LR構文解析法は十分なものとはいえないと私は感じました。
例えば、英語圏の考え方では、主語→動詞→名詞→副詞のように状態を遷移しつつ構文を解析できます。一方日本語の場合、語順が決まっていないので、全体像の論理的整合性で判断しなくてはなりません。すなわち、良い/悪いはさておき日本語の方が抽象度が高いと言えます。
それに加え、空白の区切り記号を使うのは英語的発想です。日本語では空白で区切りません。という事は、日本語的なプログラム言語を開発する場合、
字句解析と構文解析を組み合わした新しい方式を作る必要があると思います。
そもそもこの方式は、
ハードウェアスペックが低い当時から発想が出発しているように見受けられます。という事は、当然の発想として
富豪的構文解析法を考える余地があると私は考えます。富豪プログラミングは必ずしも最良の手段ではないのですが、構文解析法は複数の方式があった方が良いのではないでしょうか?
・・・・・・あれ?私は誰に話しかけているのでしょうか?
メモなのに語り口調になってしまった(笑)
テーマ : プログラミング
ジャンル : コンピュータ