問題タブ [peg]
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.
parsing - 左再帰をサポートする PEG ベースのパーサー ジェネレーターはありますか?
左再帰は、再帰降下構文解析の基礎の上に構築された多くのパーサー ジェネレーターにとって大きな問題のようです。どの言語でも、それをサポートする PEG ベースのパーサー ジェネレーターを探しています。
python - PEG の Empty 生産の役割は何ですか?
空の生産ルール
lex-yacc LR ボトムアップ パーサー ジェネレーター (PLY など) で役立ちます。
pyparsing などの PEG パーサーで空のプロダクションを使用する必要があるのはどのような状況ですか?
javascript - コード補完に使用されるCFG/PEG?
CFGまたはPEG文法を、変更せずに直接コード補完の基礎として使用できるかどうか疑問に思っています。コード補完はIDEにあると聞いていますが、パフォーマンスを向上させるために、操作やマッサージを行ったり、ハードコーディングしたりすることもあります。
小さなDSLでコード補完したいので、文法はライブラリ関数などの知識を持つコード補完システムには役立たないことを十分に理解しています。
私が知っている限り、パーサー自体は、少なくとも次に何を期待するかを照会するためのシステムを提供する必要があります。
特に、 peg.js またはjisonを使用したJavaScriptコード補完ソリューションに興味があります
ruby - PEG問題でBBcodeパーサーを作る
私は PEG (Ruby の Citrus 実装) で bbcode パーサーを作成しています。[b]sometext[anothertext[/b]
コードあり
問題はtext
、テキストに \r、\n、open_tag、または close_tag 以外のすべてを含めることができるという、言い方がわからないルールにあります。この実装では、例では [ と ] が除外されているために失敗します (それは間違っています)。
最後の質問は、\r、\n、または open_tag または close_tag の完全一致以外のすべてに一致するルールを実行する方法です。
別の PEG 実装の解決策がある場合は、それも提供してください。私は切り替えることができます:)
parsing - boost::spirit のような LPEG (Lua Parser Expression Grammar) の使用
だから私はブースト精神文法を置き換えるためにlpegで遊んでいます.boost::spiritはlpegよりもはるかにエレガントで自然です。ただし、現在の C++ コンパイラ テクノロジの制約と C++ の TMP の問題により、これを使用するのは困難です。この場合、型メカニズムは味方ではなく敵です。一方、Lpeg は醜い基本的な結果であり、生産性が向上します。
とにかく、余談ですが、私の lpeg 文法の一部は次のようになります。
この文法は (不完全ではありますが) 次のものと一致しますnamespace foo {}
。次のセマンティクスを実現したいと思います (ブースト スピリットを使用する場合の一般的なユース ケースです)。
- 名前空間ルールのローカル変数を作成します。
namespace IDENTIFIER {
が一致した場合、このローカル変数に名前空間データ構造を追加します。- 新たに作成された名前空間データ構造を に渡し、
NAMESPACE_BODY
AST をさらに構築します... などなど。
このユースケースは達成可能であると確信しています。それを示す例はありません。その方法を理解するのに十分な言語やライブラリを知りません。誰かがその構文を示すことができますか?
編集: lpeg で踊ろうとして数日間足を踏み入れた後、私は精神に戻ることにしました :D lpeg が lua 関数で織り込まれることを意図しており、そのような織りが非常に自由であることは明らかです-フォーム (一方、スピリットには非常によく文書化された明確なセマンティクスがあります)。ルアの適切なメンタルモデルをまだ持っていません。
ruby - ツリートップの最も単純なルールが機能しない
私は2つのルールしかないツリートップ文法を持っています:
単純な文字列(「A」と「5」)を解析しようとしています。「5」は、そのルールを最初に配置するとNumとして認識され、そのルールを2番目に配置するとnilを返します。同様に、「A」は、そのルールを最初に配置するとIDとして認識され、そのルールを2番目に配置するとnilを返します。これらの2つのルールがどのように重なっているのか理解できません。それは私を夢中にさせています!
ツリートップや正規表現について、足りないものや理解できないものはありますか?よろしくお願いします。
treetop - Treetop(PEG)文法で使用される省略記号(空の文字列)は何ですか?
Treetopのウェブサイトは私が理解していない次の説明をします
省略記号空の文字列はどの位置でも一致し、入力を消費しません。単一のシンボルをシーケンスの一部として扱いたい場合、たとえば、代替ルールが共有コードを使用して処理される場合に役立ちます。
ルールalts(foo bar / baz''){def value elements.map {| e | e.text_value} end} end
シンボルをシーケンスの一部として扱うのに役立つのはいつですか?誰かがその意味のある例を提供できますか?
parsing - LPeg文法の奇妙さ
私のLuaアプリケーションの一部は検索バーであり、ブール式を理解できるようにしようとしています。LPegを使用していますが、現在の文法では奇妙な結果が得られます。
最初のトークンを解析するだけで、なぜこれを行うのか理解できません。私の知る限り!.
、開始非終端記号の終わりにあるため、部分一致は不可能です。どうすればこれを修正できますか?