問題タブ [grako]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - ルールが一致した場合の Grako エンド クロージャ
私はこの文法を持っています:
しかし、解析しようとすると、常に式の名前が引数の一部として消費されます。args クロージャー内のすべての名前の前に、expression と一致し、渡された場合に終了できるかどうかをテストする方法はありますか?
前もって感謝します。
編集: セマンティクスを通じて解決しましたが、グラコ ebnf を通じて可能かどうかはまだ興味があります。
cython - Grako を Python にインストールする際のリンク エラー
どうやらCythonでコンパイルするPyPIからパッケージgrakoをインストールしようとしています。このプロセスが何を意味するのかわからず、未解決のシンボルで中断します。
多分誰かが私にこれを機能させるために何をチェックするべきかヒントを与えることができますか?
Windows、Anaconda、Python 3.4 での出力は次のとおりです。
それは言う
それを修正できる簡単な方法はありますか?
python - Grako - エラー処理の方法は?
Grako でエラー処理を行うにはどうすればよいですか?
EBNF (MyGrammar.ebnf):
私はパーサーを生成しています
空の文字列と「不正な」文字列 (文法で一致できなかった) を解析すると、両方とも空の AST クロージャーになります。
さらに、「expected foo at position 123」のようなエラー メッセージはありますか?
parsing - PEG 解析は、少なくとも 1 つの保存順序と一致します
PEG ルールを考えると、次のようになります。
要素の少なくとも 1 つに一致するように、しかしおそらくすべての要素に一致するように、これを書き直すにはどうすればよいですか?
つまり、次のすべての行に一致させたいと思います。
ただし、空の文字列や誤った順序の式ではありませんdef abc
。
もちろん、要素が 3 つの場合は、別のルールで組み合わせを詳しく説明できますが、要素の数が増えると、エラーが発生しやすくなります。
これを簡潔に指定する方法はありますか?
python - グラコ「コード」生成
grakoによって生成されたパーサーによって解析されたドキュメントを再作成する方法を理解しようとしています。
grako のソース コードに深く没頭した後、AST から生成されたドキュメントに戻る方法をようやく理解できたと思います。誰かが私の次の理解が正しいことを確認してください。より簡単な方法があれば教えてください。
- 解析したい PEG 文法を作成します。Grako はそれに基づいてパーサー クラスとセマティクス クラスを作成します。
grako.model.Node
自分の文法のすべてのルールに対して、(多かれ少なかれ) 個別のクラス (のサブクラス) を含む python モジュールを (手動で) 作成します。各クラスには、少なくとも、対応するルール内のすべての名前付き要素のパラメーターを持つコンストラクターが必要であり、その値をクラス プロパティに格納する必要があります。- 生成されたセマンティクス クラスを (手動で) サブクラス化し、各ルールの ast をステップ 2 で作成した対応するクラスに置き換えます。
grako.codegen.ModelRenderer
自分の文法の(多かれ少なかれ)各ルールの「コード」生成用のテンプレートを定義するサブクラスであるpythonモジュールを(手動で)作成します。- Node サブクラスで構成される AST とテンプレートを含む python モジュールをフィードし
grako.codegen.CodeGenerator().render(...)
て、出力を作成します。
これは正しいでしょうか?これはまったく直感的ではないようです。
- すでに AST に含まれている情報を保存するだけで、ステップ 2 と 3 の多大な労力を費やすのはなぜでしょうか?
- AST から直接作業するのではなく、このアプローチの利点は何ですか?
- 元の文法でドキュメントを再作成したいだけの場合、ステップ 2 と 3 を自動化または回避する方法はありますか?
- PEG文法定義が与えられた場合、「パーサージェネレーター」を作成するのと同じように、「コードジェネレータージェネレーター」を自動的に作成することは理論的に可能ですか?
abstract-syntax-tree - 拡張抽象構文ツリー
簡単な文法は次のとおりです。
この入力ストリームを Grako で解析します。
そして、この抽象構文ツリー (JSON) を取得します。
次のような AST を取得する簡単な方法はありますか。
またはこれ:
?
Grako で生成されたパーサーのセマンティック アクションが解決策だと思いますが、わかりません。
これを行う簡単な方法はありますか?
python - grako なしで grako で生成されたパーサーを使用することは可能ですか?
タイトルを参照してください。私が書いている小さなツールでは、単純なブール値フィルター言語を導入したいと考え、それを「適切に」行い、パーサー ジェネレーターを使用することにしました。grako を少しいじってみたところ、私はそれが気に入っていて、フィルター言語をかなり素早く完成させることができました (これも素晴らしいです :))
問題は、他のコンピューターでツールを使用したり、他の人にツールを提供したりしたい場合、最初に何らかの方法でグラコを利用できるようにする必要があることです。これは少し面倒です。
必要なグラコクラスを一緒にパッケージ化することで可能だと思いますが、それは少し面倒です (ライセンスについては何らかの形で言及されます)。組み込みのメソッドを見落としている可能性があります。
xtext - grako からの翻訳時の XText のノード ラベル/キー
grako では、次のようname:e
にして e の結果を名前をキーとして AST に追加できます。例えば
これを Xtext に翻訳すると、どのようなものがよいでしょうか? 私は試した
これは失敗していませんが、次の警告が発生しています
私はname
動作を模倣しようとしていると思いますが、あまり成功していません。