問題タブ [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.

0 投票する
2 に答える
558 参照

parsing - 左再帰をサポートする PEG ベースのパーサー ジェネレーターはありますか?

左再帰は、再帰降下構文解析の基礎の上に構築された多くのパーサー ジェネレーターにとって大きな問題のようです。どの言語でも、それをサポートする PEG ベースのパーサー ジェネレーターを探しています。

0 投票する
1 に答える
381 参照

python - PEG の Empty 生産の役割は何ですか?

空の生産ルール

lex-yacc LR ボトムアップ パーサー ジェネレーター (PLY など) で役立ちます。

pyparsing などの PEG パーサーで空のプロダクションを使用する必要があるのはどのような状況ですか?

0 投票する
1 に答える
97 参照

python - 正規表現の代替に関するこの説明は間違っていますか?

PEGに関するウィキペディアの記事には、次のように記載されています。

文脈自由文法と構文解析式文法の根本的な違いは、PEG の選択演算子が順序付けられていることです。最初の選択肢が成功した場合、2 番目の選択肢は無視されます。したがって、文脈自由文法や正規表現のような順序付けられていない選択とは異なり、順序付けられた選択は交換可能ではありません。

しかし、この質問は、選択肢が互いの部分文字列である場合を発見しました。その場合、正規表現は に従って動作しませんunordered choice。wiki はほとんどの部分で正しいですが、このエッジ条件を考慮していません。私の評価は正しいですか?

0 投票する
2 に答える
2480 参照

javascript - コード補完に使用されるCFG/PEG?

CFGまたはPEG文法を、変更せずに直接コード補完の基礎として使用できるかどうか疑問に思っています。コード補完はIDEにあると聞いていますが、パフォーマンスを向上させるために、操作やマッサージを行ったり、ハードコーディングしたりすることもあります。

小さなDSLでコード補完したいので、文法はライブラリ関数などの知識を持つコード補完システムには役立たないことを十分に理解しています。

私が知っている限り、パーサー自体は、少なくとも次に何を期待するかを照会するためのシステムを提供する必要があります。

特に、 peg.js またはjisonを使用したJavaScriptコード補完ソリューションに興味があります

0 投票する
3 に答える
236 参照

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 実装の解決策がある場合は、それも提供してください。私は切り替えることができます:)

0 投票する
1 に答える
1044 参照

parsing - boost::spirit のような LPEG (Lua Parser Expression Grammar) の使用

だから私はブースト精神文法を置き換えるためにlpegで遊んでいます.boost::spiritはlpegよりもはるかにエレガントで自然です。ただし、現在の C++ コンパイラ テクノロジの制約と C++ の TMP の問題により、これを使用するのは困難です。この場合、型メカニズムは味方ではなく敵です。一方、Lpeg は醜い基本的な結果であり、生産性が向上します。

とにかく、余談ですが、私の lpeg 文法の一部は次のようになります。

この文法は (不完全ではありますが) 次のものと一致しますnamespace foo {}。次のセマンティクスを実現したいと思います (ブースト スピリットを使用する場合の一般的なユース ケースです)。

  1. 名前空間ルールのローカル変数を作成します。
  2. namespace IDENTIFIER {が一致した場合、このローカル変数に名前空間データ構造を追加します。
  3. 新たに作成された名前空間データ構造を に渡し、NAMESPACE_BODYAST をさらに構築します... などなど。

このユースケースは達成可能であると確信しています。それを示す例はありません。その方法を理解するのに十分な言語やライブラリを知りません。誰かがその構文を示すことができますか?

編集: lpeg で踊ろうとして数日間足を踏み入れた後、私は精神に戻ることにしました :D lpeg が lua 関数で織り込まれることを意図しており、そのような織りが非常に自由であることは明らかです-フォーム (一方、スピリットには非常によく文書化された明確なセマンティクスがあります)。ルアの適切なメンタルモデルをまだ持っていません。

0 投票する
1 に答える
193 参照

ruby - ツリートップの最も単純なルールが機能しない

私は2つのルールしかないツリートップ文法を持っています:

単純な文字列(「A」と「5」)を解析しようとしています。「5」は、そのルールを最初に配置するとNumとして認識され、そのルールを2番目に配置するとnilを返します。同様に、「A」は、そのルールを最初に配置するとIDとして認識され、そのルールを2番目に配置するとnilを返します。これらの2つのルールがどのように重なっているのか理解できません。それは私を夢中にさせています!

ツリートップや正規表現について、足りないものや理解できないものはありますか?よろしくお願いします。

0 投票する
1 に答える
5971 参照

javascript - PEG.js で空白を無視する

文法で空白改行を無視したいので、 PEG.js出力に欠落しています。また、括弧内のリテラルは新しい配列で返される必要があります。

文法

テストケース

出力

欲しい出力

0 投票する
1 に答える
139 参照

treetop - Treetop(PEG)文法で使用される省略記号(空の文字列)は何ですか?

Treetopのウェブサイトは私が理解していない次の説明をします

省略記号空の文字列はどの位置でも一致し、入力を消費しません。単一のシンボルをシーケンスの一部として扱いたい場合、たとえば、代替ルールが共有コードを使用して処理される場合に役立ちます。

ルールalts(foo bar / baz''){def value elements.map {| e | e.text_value} end} end

シンボルをシーケンスの一部として扱うのに役立つのはいつですか?誰かがその意味のある例を提供できますか?

0 投票する
1 に答える
428 参照

parsing - LPeg文法の奇妙さ

私のLuaアプリケーションの一部は検索バーであり、ブール式を理解できるようにしようとしています。LPegを使用していますが、現在の文法では奇妙な結果が得られます。

最初のトークンを解析するだけで、なぜこれを行うのか理解できません。私の知る限り!.、開始非終端記号の終わりにあるため、部分一致は不可能です。どうすればこれを修正できますか?