5

grakoによって生成されたパーサーによって解析されたドキュメントを再作成する方法を理解しようとしています。

grako のソース コードに深く没頭した後、AST から生成されたドキュメントに戻る方法をようやく理解できたと思います。誰かが私の次の理解が正しいことを確認してください。より簡単な方法があれば教えてください。

  1. 解析したい PEG 文法を作成します。Grako はそれに基づいてパーサー クラスとセマティクス クラスを作成します。
  2. grako.model.Node自分の文法のすべてのルールに対して、(多かれ少なかれ) 個別のクラス (のサブクラス) を含む python モジュールを (手動で) 作成します。各クラスには、少なくとも、対応するルール内のすべての名前付き要素のパラメーターを持つコンストラクターが必要であり、その値をクラス プロパティに格納する必要があります。
  3. 生成されたセマンティクス クラスを (手動で) サブクラス化し、各ルールの ast をステップ 2 で作成した対応するクラスに置き換えます。
  4. grako.codegen.ModelRenderer自分の文法の(多かれ少なかれ)各ルールの「コード」生成用のテンプレートを定義するサブクラスであるpythonモジュールを(手動で)作成します。
  5. Node サブクラスで構成される AST とテンプレートを含む python モジュールをフィードしgrako.codegen.CodeGenerator().render(...)て、出力を作成します。

これは正しいでしょうか?これはまったく直感的ではないようです。

  • すでに AST に含まれている情報を保存するだけで、ステップ 2 と 3 の多大な労力を費やすのはなぜでしょうか?
  • AST から直接作業するのではなく、このアプローチの利点は何ですか?
  • 元の文法でドキュメントを再作成したいだけの場合、ステップ 2 と 3 を自動化または回避する方法はありますか?
  • PEG文法定義が与えられた場合、「パーサージェネレーター」を作成するのと同じように、「コードジェネレータージェネレーター」を自動的に作成することは理論的に可能ですか?
4

1 に答える 1