javascriptで演算子構文解析を使った構文解析器

なんか、くろさんと言う人のコメントあったので書いてみます。

javascript演算子構文解析を使った構文解析器?


演算子構文解析って、演算子順位法のことなんでしょうかねぇ。
一生懸命勉強したけど、ああ、なんとなくわかったー。けど、ウムムムムという。。。


http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GGLJ,GGLJ:2007-46,GGLJ:ja&q=%e6%bc%94%e7%ae%97%e5%ad%90%e9%a0%86%e4%bd%8d%e6%b3%95

http://guppy.eng.kagawa-u.ac.jp/2006/ProgLang/Programs/OpPrec/OpPrec.c

このへんを移植すればいいんじゃと。
正規表現だのPEGだの何だのの、うんちゃらかんちゃらオートマトンを頭に
ちゃんと入れるための練習になるだろうと思ってやってみようかなぁと思いつつも、もうちとググってみよう。

http://d.hatena.ne.jp/amachang/20070829/1188400850

どうも、amachangさんが書いてたのが演算子順位法らしいよっと。
ほんとにそうなのかどうかも、検証できない情けなさ。(泣
Cleanとかで作るインタプリタとかも演算子順位法なのかなぁ。パーサコンビネータとか何とか書いてあったけども。
うーむ。中身がよく分かってないので、わからない。(泣


うーむ。移動(shift)?還元(reduce)。ハァ?という情けなさな訳ですよ。。。
聞いたことはあるけど、わかんねぇ。ホントわかんない。
感覚的に受け付けない。困ったもんですよ。


それでも考えてみる。
うーと、上昇型だと、a+b*cがあったら、id+id*idになって、いくらしい。F+F*F,F+T*F,F+T,T,E
ううーむ。

1.スタックに空記号$をつんでおく
2.入力記号aをよむ
3.スタック上の演算子sに対し、s > aであるかぎリ、還元する
4.そうでなければ、aをスタック上につみ、2へ
5.全部認識されたら終わり。


還元ってのが、文法規則を適用するってことらしく、文法規則を適用するってことで、
うーむ。わかったようなわからんような。


らしいのでこれが、どうも、amachangさんの構文解析でやってることっぽい。
うーと、変にリストつくらんでも、優先順位は比較するだけで済むから楽なのかもなぁ。
うう苦しい。でも、覚えると多分、凄く楽に書ける気がする。
てことで寝る。あれだな、、、。演算子順位法の大小関係の表を作らないで直接比較する。
んで、オラオラー!ってほうが分かりやすいんだろうね。
比較結果を持っとくと高速化できるてことなんだろうなぁと。


ううむ。苦しい。何で苦しいのかわからないけど、苦しい。
くるしいので覚えられない。そして、忘れる。


おととい、ちと仕事しすぎて筋肉痛なのでした。
スコップで土をネコ(一輪車のこと)に移動して、Cコック外しを永遠とやってたからなぁ。
これが偉い大変な仕事なのだよ。