Updated on 2013-03-09 (土) 23:45:32 (4351d)
数式を解釈するプログラムのサンプル †本研究室で「ユーザが入力した数式を処理したい」というニーズがあったので、 コンパイラの教科書ならどれにも載っているような四則演算の数式を処理するサンプルを作ってみました。 このサンプルで対応するのは参考文献1.のP143にG3として載っている文法(の一部)で、以下に示します。 赤い文字は文法そのものを記述するためのメタ文字です。
EはExpression(式)、TはTerm(項)、FはFactor(要素、つまり数値や変数名など)に対応しています。
ソースはどちらもC++用ですが、1行コメント(//で始まる部分)以外はC++の機能を用いてないので、 C用にすぐ書き直せると思います(出力もprintfですし)。 機能はシンプルで、コマンドラインで引数として与えられた式を解釈してその値を表示します。 変数や関数を扱うようにも簡単に拡張できるでしょう。 それではKさん、がんばってください。 なお、上記のソースは漢字コードがEUC、改行がLFです(要するにUNIX)。 WindowsやMacで利用するには、Vectorあたりで何か変換要ソフトをさがしてください。 例えば、TeraPadあたりです。 蛇足とは思いますが、MS-DOSは漢字コードがSJISで改行コードがCR+LFです。 実行例 †実数を用いた括弧付きの四則演算を解釈して実行します。変数などには対応していません。 UNIX †./a.out '(38.2-15.366)*14+13.6/4.6' ←引数として式を入力 Result = 322.632522 ←結果が表示される UNIXのように*などの文字がシェルで展開される環境では、 引数をシングルクォーテーションで囲まないとうまく機能しません。 MS-DOS †parser (38.2-15.366)*14+13.6/4.6 ←引数として式を入力 Result = 322.632522 ←結果が表示される MS-DOSは低能なので、*などの文字を処理せずにそのままコマンドに渡すため、 クォートなしで動きます。 参考 参考 †
2013-03-09追記 †
|