私が読んだすべてのことは、正規表現のようなTreetopのバックトラックを示唆していますが、それを機能させるのに苦労しています。
次の文法があるとします。
grammar TestGrammar
rule open_close
'{' .+ '}'
end
end
これは文字列と一致しません{abc}
。.+
それは、手紙a
以降のすべてを消費しているからだと思います。つまり、消費abc}
したいだけのときに消費しますabc
。
これは、同様の正規表現が行うこととは異なるように見えます。正規表現/{.+}/
は一致し{abc}
ます。これが可能であるのは、正規表現エンジンがの}
一部としてクロージングを消費した後.+
、一致しなかったためにバックトラックするためであると私は理解しています。
では、Treetopはそのようなバックトラックを実行できますか?もしそうなら、どのように?
}
否定を使用して「 。以外のもの」と一致させることができることを私は知っています。しかし、それは私の意図ではありません。文字列と一致させたいとします{ab}c}
。その場合に必要なトークンは、開始{
、中間の文字列ab}c
、および終了}
です。これは不自然な例ですが、のようなネストされた式を操作する場合に非常に関連性が高くなり{a b {c d}}
ます。