Skip to main content

括弧を追加しよう

構文解析

括弧を処理する構文解析は、実に鮮やかに書くことが出来ます。掛け算の時のように、括弧で囲まれた式がいかなる場所で表れるかを考えてみましょう。

括弧を含む式の例

(1+2)+3
(1+2)*3
1+(2*3)+4
5+(6)+7
(3+5)

()で囲まれた式は、+や*の左右の式に含まれることがわかります。そして、括弧内には、任意の式を書くことが出来ますね。

これを実装にすると、以下のようになります。

example
Factor = "(" e: Expression ")" {
return e
} / num: Integer {
return {tag: "Number", value: num}
}

とてもシンプルですね!

評価

今回はASTに新たなtagを追加していないので、eval関数は全く変える必要がありません。

まとめ

括弧を含む四則演算を構文解析し、評価する言語処理系を書くことが出来ました。しかし、これだけではあまりプログラミング言語という感じはしませんね。そこで、次は一般的なプログラミング言語によくある、変数やif、関数を追加していきましょう。