1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ParserScript 1.0と2.0の違い

Last updated at Posted at 2024-10-31

 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ができた時ですけどね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?