昨日のエントリーで、小学生レベルの算術計算をする仮想機械RAC0(Rudimentary Arithmetic Calculator Level-0)を示しました。たいへん貧弱な仮想機械ですから、機能を拡張したいとは思うのですが、その前に、RAC0用の高級言語を作っておきましょう。 高級言語といっても、1 + 2, (5 - 2)*4 のような算術式(arithmetic expression)です。詳しく仕様を書いても次の程度。 定数リテラルは、符号なしの整数。03 のように先行する0があってもよい*1。 負の数を表すリテラルがないので、(0-3) のように引き算で代用。 演算記号は、+, -, *, /, % の5種類。いずれも二項中置演算子。 *, /, % は、+, - より優先される。 丸括弧を使って、式のグループ(まとまり)を作ってよい。 同じ優先順位の演算は左結合的。例えば、