タグ

ブックマーク / tociyuki.hatenablog.jp (2)

  • 演算子優先順位構文解析器 - Tociyuki::Diary

    「富豪的 CLOSURE 計算結果使い捨て型シフト還元解析おもちゃ」は、プログラミング言語用の構文解析器で使うのには向いていません。どちらかというと、左再帰があるテキスト処理やデータ処理の構文解析器に使えないものかと考えています。 ところで、プログラミング言語で上向き構文解析したい箇所と言えば、左再帰になっている二項演算子式の生成規則がまっさきに思い浮かびます。他は下向き構文解析向けの部分が大半です。それならば、下向き用の定番、再帰下降型解析器の中に上向き構文解析器を組み込めると何かと便利でしょう。そのような用途に、演算子優先順位構文解析器 (Operator-precedence parser) がうってつけです。yacc/bison のように優先順位と左結号か右結合かを指定するだけで望みのままに二項演算子を利用できる解析器を、再帰下降型構文解析器へシームレスに組み込むことができるように

    演算子優先順位構文解析器 - Tociyuki::Diary
  • 継続でバックトラックを Ruby で - Tociyuki::Diary

    年度末になると忙しくなる人種に巻き込まれてしまい、RubyPerl を使って遊ぶのは数週間ぶりのことです。中断していた作業をチェックアウトして眺めていたのですが、どうも気分が乗らないので、リハビリを兼ねて LispUser.net : 継続でバックトラック の scheme のバックトラックの例題を Ruby に直訳してみました。 if 文の条件式を満たす x、y、z の組み合わせを探す問題です。探索範囲は 0 から 100 の整数。それぞれの値で条件が成り立つかどうかをチェックし、成り立たないときは、fail 関数を呼ぶことでバックトラックを生じさせて、次の数値のチェックを続けます。 require 'trial' def solve x = Trial.in_range(0, 100) y = Trial.in_range(0, 100) z = Trial.in_range(0

    継続でバックトラックを Ruby で - Tociyuki::Diary
  • 1