問題タブ [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 - グラコでのルールの優先順位の問題
私は元々 Perl で構築したミニ言語をやり直しています ( github の Chessa# を参照) が、セマンティクスを適用するときに多くの問題に直面しています。
文法は次のとおりです。
私が直面している問題はd
、演算子と後続の英数字文字列の間に空白が存在しない場合、演算子が識別子ルールに引き込まれていることです。文法自体はLL(2)なのですが、どこが問題なのかわかりません。
たとえば、は識別子4d6
として解釈されているため、パーサーを停止します。起こるべきことは、 が演算子であると解釈されることです。LL パーサーでは、これが実際に当てはまります。4
d6
d6
4
d
6
d
考えられる解決策はd
、識別子の開始を禁止することですが、これにより、関数などのdrop
名前をそのように指定することが許可されなくなります。
python - リスト内の浮動小数点は、「利用可能なオプションがありません」というエラーでパーサーを停止させます
この文法を考えると:
およびこのセマンティクス オブジェクト:
...パーサーは、no available options
非整数要素 (フロートまたはリスト; 変数は問題ありません) を含むリストに遭遇すると、エラーで停止します。
例:
drop(4d6, 1)
[1.5, 2, 3]
興味深いことに、drop([1, 2, 4, 2], 1)
正しく動作し、 を出力します[2, 4, 2]
。
grako - 字句要素をバラバラにする
私の文法ファイルtest.ebnf
は次のようになります。
入力「test1234」でこの文法を実行すると、単一の語彙素として「test1234」が生成されますが、AST は次のようになります。
nameguard
機能をfalseに設定して実行しようとしましたが、うまくいきませんでした。のようなルールを書かずにこの動作を得るにはどうすればよいidentifier = /[a-z]*[0-9]*/
ですか?
python - Pythonで構造化言語ファイルを処理する方法
次のような大きな構造化言語ファイルがあります。
私はPythonとスクリプト作成に本当に慣れていません。Python を使用してこのテキスト ファイルを AST に解析する方法。Web での検索で、python の grako がオプションであることがわかりました。グラコがどのように機能するかをサンプルコードで説明していただけますか。ありがとうございます。
python - ソースコード生成
Python の grako ユーティリティを使用して OIL ファイルを AST に解析しています。しかし、AST を変更した後、AST からソース コードを再生成したいと考えています。グラコにはこれを行う機能がありますか、それともPythonの他のユーティリティがこのソースコードの再生成に利用できますか?