問題タブ [pegjs]

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 に答える
138 参照

javascript - PEGjs: 算術関数の定義に関するヘルプ/ガイドのリクエスト

私は PEGjs 文法を学んでおり、次のヘルプまたはガイドをリクエストしています。

私は次のような機能を持っていますPRODUCT(), SUM(), DIVIDE()

PRODUCT は number /PRODUCT()/SUM()/DIVIDE() をパラメーターとして使用できます (カンマで区切られた任意の数字)

同じように、SUM はコンマで区切られた任意の数のパラメーターを取ることができます。

DIVIDE は 2 つのパラメーター (2 つが必須)、数値または別の関数を取ります

どうすれば達成できるか教えてくれますか?

今までのルール

上記のルールは、2 つの数値の積/合計のみをサポートします。上記を達成するにはどうすればよいですか?

前もって感謝します Manjunath Reddy

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

javascript - requirejs で pegjs をロードするように Karma を構成する

PegJS と requirejs を使用してプロジェクトをテストしようとしています。AMDモジュール(定義)として実装されたソースファイルがいくつかあり、require APIを介してロードされます。ディレクトリ構造の下:

PegJS 文法ファイルをロードし、PegJS を使用してペグ パーサーを作成するためのparser.jsモジュールを作成しました。

これは、ノードを使用してコマンドラインで実行される main.js で正常に機能します。ここで、カルマ、ジャスミン、PhantomJS を使用してプロジェクトをテストしたいと考えています。次のようなkarma.conf.jsがあります。

また、次のように構成されたtest-main.jsという名前のブートストラップ ファイルが必要です。

ここで、テスト ( grunt karma) を起動すると、次のエラーが発生しました。

そこで、Karma によってロードされたファイルに pegjs をこのようにkarma.conf.jsとして含めようとしました。

これを行うと、まだエラーが発生します。

pegjs モジュールの中を見ると、確かに arrays.js ファイルがあります。

したがって、配列も含めようとしています:

私は得る:

なぜなら:

そこで、npm モジュールをロードする代わりに、bower モジュールを次のようにロードしようとしました。

そして、ここに再び行きます:

また、karma で生成された Web ページに pegjs を含めないようにしました。

しかし、それは失敗します:

bower_component フォルダーを js フォルダー内に配置しようとしましたが、うまくいきませんでした。

だから、ここから行くべきかどうかはわかりません... Googleまたはここで関連するものが見つかりませんでした。カルマでrequirejs / pegjsを使用するのは特定の問題のようです...どんなアイデアでも大歓迎です。

次のダンの答えを更新してください:

そこで、 parser.jsで同期の require から非同期の require に切り替えます。

karma.conf.js にpegjs bower コンポーネントを含めようとしました:

または含まない:

ただし、常に同じエラーが発生します。

はい、ファイルが存在します:

UPDATE2 : 最終的に理解し、許容できる解決策を見つけました。

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

javascript - PEG.js 文法定義での引用符と Unicode の許可

一重引用符と二重引用符、および PEG.js 文法定義内の Unicode 文字をどのように許可しますか? より具体的には、一重引用符と二重引用符の両方を含むことができる文字列 (\ でエスケープする必要がある可能性が最も高い) とすべての Unicode 文字をキャプチャできるようにしたいと考えています。

現時点では、次のようなものがあります。

_ name:$(PROP_ASCII+) CHAR_SQ val:$(PROP_ASCII_INNER*) CHAR_SQ

次のようなものをキャプチャします

key'value'

PROP_ASCII* は次のように定義されます

PROP_ASCII = [!-&(-<>-~] PROP_ASCII_INNER = [ -&(-~]

したがって、値に標準のASCII文字が含まれ、単一引用符が含まれていない場合、これはうまく機能します...しかし、上記で説明したことをサポートしたいので、次のようなことが可能になります:

key'somé\'value\'☂'

考え?

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

javascript - pegjs正規表現は、単語のコレクションから単語が見つかるまで単語を一致させます

プロジェクトに pegjs パーサー ジェネレーターを使用していますが、一致してはならない単語のコレクションまで、すべての単語に一致する文法を作成するのに苦労しています。文字列 "the door is yellow" の例として、 is までのすべての単語を一致させたいので、単語 is から解析を開始するように pegjs パーサーに指示します。パーサーにブレークさせたい単語のコレクションは、「is」「has」および「of」です。

現在の文法規則は次のとおりです。

パーサーが私のコレクションを単語に含めないようにするルックアヘッドを作成するにはどうすればよいですか?

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

peg - 単純な検索/置換に PEG.js を使用する

テキスト内の単純な検索/置換に PEG.js を使用する方法を理解しようとしています。確かに、これはパーサーの意図された用途ではありませんが、とにかく、検索/置換を生成するためのこれらの種類の言語の背後にあるロジックに興味があります。

私が抱えている問題は、いくつかの定義の補完を積極的に定義するのが難しいということです。例: 次の構文のようなものを検索して置換したいとします。

PEG.jsの唯一の否定的なパーサー関数は と であるため、とのwhatever_is_not_my_syntax部分的な衝突 (およびその結果のパーサー エラー) なしで PEG.jsにあるものを積極的に説明することは困難です。my_syntax!expression[^characters]

手伝って頂けますか?このトピックに関する本や参考文献があれば、よろしくお願いします。前もって感謝します。

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

parsing - 任意の 3 つの要素を任意の順序で受け入れる PEG 文法

と の 3 つの要素があるa bとしcます。

有効な式は、これら 3 つの要素 (およびオプションの空白) を使用します。

  1. これらの 3 つの要素の少なくとも 1 つが存在する必要があります。
  2. 3 つの要素はすべてオプションです (他の 2 つの要素の少なくとも 1 つが存在する限り、1 を参照してください)。
  3. これら 3 つの要素が提供される順序は重要ではありません。

これら 3 つの要件を満たす PEG 文法を記述する慣用的な方法はありますか?

http://pegjs.org/onlineで peg.js をいじって(1) (先読み) と (2) を解決しましたが、(3) はわかりません。助言がありますか?

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

javascript - 文法が関数ルールに必要な回数以上一致しています

これが私が使った文法です。ルール「Func」に一致した後のアクションは、入力文字列 if(diff("col")) に対して 2 回ではなく 12 回呼び出されます。

デバッグ Eq ルールを解析しているときに、変数 peg$currPos が元に戻されていることに気付きました。正確な動作を理解できません

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

javascript - PEG.js のすべての代替パターンをテストする

PEG.js を使用して、いくつかの異なる形式の数字を認識したいと考えています。

PEG.js は、一連の代替候補の前の方に部分一致がある場合、代替候補を探しません。ほとんどの数値は整数で始まり、そうでない場合は実数で始まります。各代替案を個別にテストするようにこれを書き直すにはどうすればよいですか? (ルールをより少ないルールにまとめることには興味がありません。)

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

parsing - pegjs文法を使用してコメントのみを解析するには?

あらゆる種類の js/c スタイルのコメントを解析することになっている pegjs 文法を作成しました。ただし、コメント自体をキャプチャできただけで、他のすべてを無視したため、うまく機能していません。あらゆる種類の入力からコメントのみを解析するには、この文法をどのように変更すればよいですか?

文法:

入力:

エラー