構文解析

空白の有無に応じた優先順位

中置演算子を書いたときに込めた気持ちをくむように、 つめて書いた場合は優先順位が高くなり、 空白を挟んで書いた場合は優先順位が低くなると便利そう f x + y → (f x) + yと解釈 f x+y → f (x + y)と解釈すでに考えてる人がいた。が、評判よくないのか…。…

数式パーサその2

中置演算子とHaskell風の関数呼び出しをパースする処理をSchemeで書いてみた。 例えば以下のサンプルを実行すると11と6を表示する。 ( ~ a = 2 ~ b = a + 1 ~ print (a + b * 3) ~ fact n = n == 0 and 1 or n * fact (n - 1) ~ print (fact b) )実際には、…

オフサイドルールの処理

「Haskell パーサ」で検索すると、Parsec等のHaskellでパーサをつくる話ばかり出てきて Haskellのようなパーサをつくる話はみつけられなかった。 「オフサイドルール パーサ」で検索したら、以下のページが見つけられた。 ざっくり説明すると,字句解析は要…

数式パーサ

優先順位を数値で指定する方式の中置演算子の処理がちょっとわかったかも。 (use util.match) (define rule '((+ . 1) (- . 1) (* . 2) (/ . 2))) (define (prec op) (let ((n (assoc op rule))) (if n (cdr n) 0))) (define parse (match-lambda ((e1) e1) …