lisp

lispで言語実装(4)

電卓の実装(4) 番外編 前回までのコードでは、「-1+2」の様な計算ができない。本当は字句解析で「-1」というトークンを返すようにするのがいいのかもしれないが、せっかくBNFで構文解析を記述できるようにしたので、Fの定義を以下のように変更して対応してみ…

lispで言語実装(3)

電卓の実装(3) 意味解析 字句解析 構文解析 意味解析← いまここ 2*(1+2)から(* 2 (+ 1 2))が得られるようになったので、あとはそれを計算するだけ。lispで処理しやすい形に整形してあるので処理は簡単。 構文解析の時点で、1+1+1+1 → (+ 1(+ 1 (+ 1 1)))のよ…

lispで言語実装(2)

電卓の実装(2) 構文解析 字句解析 構文解析 ← いまここ 意味解析 「1+2*3」の様な入力に対して、「(+ 1 (* 2 3))」を返す処理を作成する。 数式の構文規則は、以下の様に表現される。 E := T [["+" | "-"] T]* T := F [["*" | "/"] F]* F := NUM | "(" E ")"…

lispで言語実装

新年だし、言語実装の勉強をはじめよう。ベース言語にはlispを選択。以下の手順で進めようと考えている。 電卓の実装 TinyCの実装 若干実用的な言語の実装 lisp処理系は、xyzzy lispを利用する。 電卓の実装(1) 字句解析 「(100+3)*10」のような入力に対して…