ウィキペディアによると「パーサジェネレータ」とは「構文解析器を作成するプログラムである。」とあります。構文解析については、電卓を作ったときに触れました。
電卓のときは数式を解析の対象にしていました。今回は Small Basic のプログラムを解析の対象にしたものを作成しました。プログラムIDは XWX066 として発行しました。このプログラムは Silverlight 上では動作しないので、ローカルの Small Basic IDE (統合開発環境)上で実行してください。このプログラムを “ParserGenerator04.smallbasic” という名前で保存してください。また、23行目と918行目がコメント化されているので、元に戻してから実行してください。
このプログラムは “SBGInterpreter04.smallbasic” という名前の Small Basic のグラフィックスのインタプリタを生成します。
Exec_ 、Lex_ および SBGI_ で始まるサブルーチンはインタプリタのサブルーチンとしてコピーされます。PG_ で始まるサブルーチンがこのパーサジェネレータ自身のコードになります。PG_Init がその中心的存在で、 Small Basic のグラフィックスの文法を BNF (バッカス・ナウア記法)として定義しています。サブルーチン SB_GetSub はファイル名とサブルーチン名を与え、Small Basic のソースファイルファイルからサブルーチンをテキストとして読み込みます。
解析する文法は BNF として定義しますので、この部分を変更すれば、電卓の式、古いBASIC、HTML や SVG などのマークアップ言語、BNF自身などさまざまな言語を解析することができます。
今回作ったのは、インタプリタを生成するプログラムです。インタプリタはプログラムのソースを解析してコンパイルせずにそのまま実行するプログラムです。パーサという構文解析の部分に実行する部分を追加してインタプリタにしています。実行する部分を、他の言語に変換するように変更することも可能です。
パーサジェネレータは一度作ると応用範囲が広そうなので作ってみました。今度は図形エディタを作成する前に作った色々なプログラムから図形だけを取り出すプログラムを作ってみようと考えています。