From: Minero Aoki Date: 1999-01-07T23:50:50+09:00 Subject: [ruby-list:11507] parser generator あおきです。今年もよろしくおねがいいたします。 パーサジェネレータ作りました。LALR(1)。ただし まだ演算子優先順位とスタート規則を実装していません。 文法はとりあえずこんな↓感じにしてみました。 が、yaccはほとんど使ったことがないのでなにが重要なのかがよく わかりません。文法はすぐ変えられるのでこのへんに詳しいかたの 意見をいただけるとうれしいです。 rule # これはコメント。 goal: definition rule source . # ひとつめのピリオドからがアクション # {…} はあまり使いたくない(rubyのコードを解析する必要があるから) # resultの値がgoalの値になる、yaccでいう$$ result = [ val[0], val[1], val[2] ] # ピリオド(と空白)のみを含む行までがrubyのコード . definition: . # 空の規則 result = [] . # '|'で同じ左辺は省略できる(yaccと同じ)。 | definition prec # result = val[0]が実行されてから制御がわたる result[0] = prec . (略) # rule節はendでおわり end inner # パーサクラス内のコード(省略可) # ピリオド(と空白)のみの行で終了 . outer # パーサクラス外のコード(省略可) # パーサクラスより前に転写される . # おわり。 とりあえずホームページ http://www1.u-netsurf.ne.jp/~brew/mine/racc.tar.gz においときましたが、こういうときってどこに おくのがよいのでしょうか。 ------------------------------------------------------------------- あおきみねろう@一橋大学 mail to: aamine@dp.u-netsurf.ne.jp website: http://www1.u-netsurf.ne.jp/~brew/mine