JavaScript (33) SGF パーサー

SGF (Smart Game Format) のパーサー、ただし構文解析部分のみを自動生成しました。結果を sgf01 で公開しました。

図30 SGFパーサーの生成
【図30 SGFパーサーの生成】
今回は EBNFParser のメソッド run に小さなバグを発見し修正しました。現象としては、SGF の

Double = '1' | '2'.

に対応するコードを生成するときに、本来、

match[++n] = this.text('1');

となるべきところが、

match[++n] = this.text('');

と 1 が消えていました。これはメソッド run の処理の中で match という配列の不要な部分を読み飛ばす

if (match[i] !== true && match[i] !== null)
 code += match[i];

というコードがあるのですが、元々は != で比較していたため、match[i] に ‘1’ が入っているときに論理値の true が入っていると判定されて、読み飛ばされていたためです。!== で型も含めて比較することでバグは改修されました。
メソッド run は自動生成されないので、今後さまざまな構文のランナーを作成する上での注意事項を文書としてまとめておいたほうがよさそうです。

コメントを残す