ParserScriptは1.0と2.0では全く違います。
今回はその違いを二つ書きます(使えるコマンドが増えたことはノーカウント)。
コードの長さ
実はParserScriptは1.0と2.0でコードの書く量が全く違います。
例えばBNFで
<letter> ::= [ "a" ]
は、バージョン1.0では結果を格納するリストの長さを±0にするときは
CALL LETTER
AST LETTER
RECORD
MATCH "a"
MATCH?
DOWN NOW
# 1.0でもDOWNPUSHを使えたが、二つ目に書くバージョン2.0だけが持つ機能がないため使えない
END
NOMATCH?
BREAK
END
LAST
と書いていたのですが、バージョン2.0で
CALL LETTER
AST LETTER
VRECORD ""
MATCH "a"
DOWNPUSH
LAST
と、書けるようになりました。ちなみに、コードを書いていると頻繁にVRECORDとDOWNPUSHを使います。
解析できる文字列
二つ目の違いはバージョン2.0ではパースする文字列の先読みができるところです。実は、バージョン2.0では結果を格納するリストにパースする文字列を格納するようになっています。つまりは、
$M1 = (V1, S1, P1)$
$M2 = (V2, S2, P2)$
$M2$をBREAK
などで消すとパースする文字列は$M2$の$P2$ではなくその前の$M1$の$P1$になる
これにより、文字列を先に見て、フラグを立てたり、折ったりして先読みをし、バージョン1.0ではできないものまでパースできます。この時にVRECORDとDOWNPUSHの組み合わせが有利にはたらきます。
終わりに
今回はParserScript 1.0と2.0での違いを紹介しました。ParserScriptは本当は自作言語作成のために作っています。でもまあ、それに取り掛かるのはバージョン3.0ができた時ですけどね。