2

タイトルを参照してください。私が書いている小さなツールでは、単純なブール値フィルター言語を導入したいと考え、それを「適切に」行い、パーサー ジェネレーターを使用することにしました。grako を少しいじってみたところ、私はそれが気に入っていて、フィルター言語をかなり素早く完成させることができました (これも素晴らしいです :))

問題は、他のコンピューターでツールを使用したり、他の人にツールを提供したりしたい場合、最初に何らかの方法でグラコを利用できるようにする必要があることです。これは少し面倒です。

必要なグラコクラスを一緒にパッケージ化することで可能だと思いますが、それは少し面倒です (ライセンスについては何らかの形で言及されます)。組み込みのメソッドを見落としている可能性があります。

4

1 に答える 1

1

短い答えはいいえです。

grakoGrako で生成されたパーサーにはライブラリが必要です。

例えば:

with self._group():
    with self._choice():
        with self._option():
            self._token('nameguard')
        with self._option():
            self._token('ignorecase')
        with self._option():
            self._token('left_recursion')
        self._error('expecting one of: ignorecase left_recursion nameguard')

すべてはまたは のいずれかself._xyz()から来ています。必要なバックトラッキング、キャッシング、簿記はすべて、コンテキスト マネージャーとデコレーターの背後に隠されています。grako.contexts.ParseContextgrako.parsing.Parser

生成されたパーサーが依存するgrakoことは、パーサーをより小さく理解しやすくすることを目的とした設計上の選択であり、これはプロジェクトの主な目的の 1 つでした (難読化されたコードを生成する優れたパーサー ジェネレーターは他にもたくさんあるため)。

もう 1 つのオプションは、生成されたパーサーが依存できるコードを各パーサーにコピーすることでしたが、これは少し非 Pythonic に思えました。

于 2016-03-19T15:39:36.873 に答える