式の構文解析が完成

TinyBASICの大きな課題のひとつに位置づけていた式の構文解析(パーサー)が思いのほかうまく完成した。実をいうとボクは過去に構文解析を作ったことがない。文献には再帰的呼び出しやスタックを駆使すると説明されていて、よくわからないのでとにかく書いては動かしてみる方法でやみくもに突き進んだらスタックを使わずに完成した。再帰的呼び出しは使う。ちゃんと計算しているからこれでいいのだと思う。

すごく難しそうな技術が、ちょっとしたことをきっかけにスラスラ理解できることがある。構文解析の糸口は、先頭は必ず値、いいかえると、先頭から演算子はない、ということ。これで処理の流れがすっきりした。ただし、負の値に-を付けたり(たとえば-5)、ひとによっては正の値に+を付けたり(たとえば+5)することがあるから、値を取得する処理で符号を考慮する。

その次に気付いたのは、カッコが値だということ。数学の授業だとカッコは計算の優先順位を指定すると説明するから、何となく構文解析の手ごわい相手と感じるけれど、機能的にはただの値で、いわば引数をそのまま返す関数として処理すればいい。結局、式は値と加減乗除からなり、優先順位は加減算と乗除算を区別すればいい。で、括弧の中にまた式が出てきたら再帰的呼び出しで解決する。完成したソースは、何か見落としがあるんじゃないかと思うくらい、すばらしく簡素なものとなっている。

問題はWindows以外の動作環境、Visual C++以外のコンパイラでうまくいくかどうかだ。Small Cは再帰的呼び出しが使えるのだろうか。PICのようなスタックの小さなマイコンが再帰的呼び出しで暴走しないだろうか。こうした疑問に答えが出るのはもうひとつの大きな課題、GOSUB~RETURNとFOT~NEXを作ったあとのことになる。そういえばこれらもスタックを使う。ああすごく不安。

広告
カテゴリー: TinyBASIC パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中