構文解析できた
俺LISPを少しずつ作っている。とりあえず、構文解析まではできた。
受理する構文をBNF的に書くと、以下の通り。
<expr> ::= <atom> | <list> <atom> ::= <identifier> | <string> | <number> | <boolean> <list> ::= <open_paren> [<expr>+ [<dot> <expr>]] <close_paren>
ただし、それぞれ
はS式 はアトム は識別子 は文字列 は数値 は真理値 - はコンスセルまたは空リスト
はカッコ はコッカ はドット - |は「または」
- []は省略可能
- +は1回以上の繰り返し
とする。
までを表すクラスを定義して、てっとり早くInterpreterパターンでParseして構文木を作った。
とっても簡単。そういや、このパターン使うの初めてだなぁ。
まだ評価する部分を実装していないから、現時点では構文木をToString()して表示するだけのプログラム。
結果の文字列をGaucheに食わせても、ちゃんと動いたよー。