問題タブ [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 投票する
1 に答える
1010 参照

javascript - PEGJS: 述語の最初の構文の AST を生成する

私は pegjs の探索に戻ってきましたが、核となる概念をまだ理解していないことは明らかです。述語で始まり、次にオペランドのリスト (別の述語を含む可能性があります) で始まる「クエリ言語」を解析しようとしています。したがって、簡単な例は次のようになります。

上記を次のように変換したいと思います。

このクエリ:

このASTになります:

私の文法は近いですが、いくつか問題があります。これが現在の PEGJS 文法です。オンラインの pegjs パーサー ( http://pegjs.majda.cz/online )に直接貼り付けることができます。

上記の文法は、私が示した 2 つの例を処理しますが、2 つの問題に気付き、次の 3 つの質問に至りました。

1.文法は、この一見単純な入力で失敗します (重要なのは、ネストされた OR が親 OR の直後に来て、「文字列」が最後にあるということです):

何がこれを引き起こしているのか、またはそれを修正する方法がわかりません。

2.文法には現在、operandルールに対して次のばかげた行があります。

.の前の 3 行目の先頭の空白 (ws) に注意してくださいor_predicate。その空白がないと、「最大コールスタックサイズを超えました」というエラーが表示されます。左再帰に関係していると思いますが、それについては肯定的ではありません。理想的には、必要な「ws」がないようにしたいので、次のようなスペースのないクエリが機能します。

現時点では、次のような余分な空白を人為的に追加する必要があります。

3. この文法へのアプローチは完全に間違っていますか? これは私が試みた 2 番目のものであり、1 番目は pegjs 算術の例に基づいていたので、これについて完全に間違っている可能性があり、それがこれらの問題に遭遇している可能性があることに気付きました。

あなたの助けと時間をありがとう!

よろしくお願いします、

エド

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

peg - 定数と識別子の解析

基本的にすべて大文字の文字列である定数に一致させたい。

また、小文字と大文字が混在する可能性のある識別子を照合したいと考えています。

問題は、一致しようとするとAsd、次のように表示されることです。Line 1, column 2: Expected [A-Z_0-9] or end of input but "s" found.

定数ルールに一致するようですが、失敗しても識別子ルールにスワップしません...

問題は、定数も有効な識別子であるように思われますが、あいまいさを解消するルールを理解できません。定数の一致が失敗した場合は、識別子ルールを試してみるべきだと思います...

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

angularjs - AngularJS webapp の Peg.js

AngularJS Web アプリケーションがあります。

アプリケーションで peg.js を使用したいと考えています。私はちょうど peg.js 文法を書きました: CriteriaValue.pegjs とコマンドラインでパーサーを生成しました: CriteriaValue.js を生成しました pegjs CriteriaValue.pegjs

誰かがパーサーの使い方を説明してくれませんか?

var result = parser.parse('my string'); 動作しません。

プランカーを作成しました: http://plnkr.co/edit/Ae05SeZAjKOQ75B3lvLc?p=preview

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

javascript - PEGJS : ネストされた pegjs 文法

次のような入力を解析したい

2 or 2 or 2または無効です2 and 2 and 22 or 2 and 2要するに、入力内で一緒に発生したくandありません。orjavascriptを使用せずに、以前に見た変数を保存せずに、ペグでこれを行う方法はありますか(私はすでに解決策を持っています)?

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

javascript - Join は関数ではありません

私はPEG.jsで遊んでいます

ここでエラーが発生するのはなぜですか:

a.join は関数ではありません

のような有効な文字列を入力すると、abc?

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

javascript - 文字を結合して 1 つの単語にする

私はPEG.jsで遊んでいます。

これは私の文法です:

ブラウザで実行すると:

私はこの出力を得る:

return a.join("")文法で使っているのに、なぜ1単語にしか繋がらないのですか?