問題タブ [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.
php - PEG-php解析ifステートメント
良い一日。PEGを使い始めたばかりです。私はwp:peg やその他の理論に精通していますが、それでも内部的にどのように機能するかを理解できません。
私の仕事は次のような式を解析することです
isステートメントの本体には、印刷演算子のみが含まれ、他には何も含まれていませんが、複雑な条件があります。
それについての私の考え:
しかし、私はこのタスクがより良い解決策を持っていると信じています:)あなたはそれで私を助けることができますか?ありがとう。
parsing - 再帰降下パーサーで「カット」を実装する
私は Python で PEG パーサー ジェネレーターを実装していますが、Prolog を知っている人なら誰でも知っているはずの「カット」機能を除いて、これまでのところ成功しています。
カット ( !) 記号が解析された後は、同じレベルで代替オプションを試行すべきではないという考え方です。
(が見られた後、解析が成功するか、2 番目のオプションを試さずに失敗する必要があることを意味します。
バックトラックを強制するために Python の (非常に効率的な) 例外システムを使用しているのでFailedCut、囲んでいる選択を中止する特別な例外を設定しようとしましたが、うまくいきませんでした。
この機能が他のパーサー ジェネレーターでどのように実装されているかについてのポインターは役に立ちます。
多分私が抱えていた問題は、地域性の欠如でした. ルールの左側の部分に対して生成されるコードは次のようになります。
次に、choice( |) 演算子用に生成されたコードは、FailedCut. 局所性の欠如とは、キャッチする選択肢FailedCutが呼び出しの奥深くにある可能性があり、その結果、識別が困難すぎるということです。
シーケンス用に生成されたコードに、カットの囲まれた選択肢を知らせようとする代わりに、選択肢用に生成されたコードにそれらを認識させることができます。これにより、Prolog とは異なり、カットの範囲が非常にローカルになりますが、特定のトークン シーケンスが表示された後にオプションにコミットするという PEG パーサーで必要なものには十分なので、エラー レポートはその場所を参照します。他のオプションが利用可能だった可能性のある別の場所ではなく、ソースで。
ルール/述語用に生成されたコードがそれをキャッチFailedCutして通常の例外に変換する場合FailedParse、カットには適切なスコープがあることに気づきました。
@falseの質問を参照して、私がやりたいことの完全な例を次に示します。
その文法では、 orwordを介して到達できますが、パーサーが.namedtermnamed:
ソリューション
公平を期すために、これまでの作品をhttps://bitbucket.org/apalala/grako/で公開しました。
最終的な解決策では、シーケンスは次のコンテキスト マネージャーで囲まれます。
また、choice 関数のオプションは次のように囲みます。
これは、次のオプションを試すために戻るのではなく、選択肢から抜け出すことを強制します。
カット自体は次のように実装されます。
完全なソース コードはBitbucketで見つけることができます。
ruby - BBCode Treetop パーサーとスマート タグ クロージング?
私は、ほとんどが機能するツリートップ グラマー ファイルを作成しました。[b]そのフォーラム用に構成された BBCodes のハッシュを持つ関数にそれらを渡したいようなタグの場合。太字が許可されている場合は HTML が返され、それ以外の場合は BB コードが無視されます。
これは、ネストされたタグでは機能しません。たとえば[b][i]Bold and italics[/i][/b]、 の最初の終了タグと一致するため、正しく処理されません[/i]。
タグが見つかったときに、否定的なルックヘッドで終了タグを探すようにするにはどうすればよいですか?
BBCode は、フォーラム管理者が特定のタグをオン/オフする動的システムであるため、BBCode の種類ごとにすべてのルールを書き出す必要はありません。
peg - この PEGjs ルールをどのように DRY しますか?
以下は、私がやろうとしていることに対してうまく機能しますが、明らかに非常に反復的です。次の例と一致する必要があります。
- #id.class1.class2 attr="asdsa"
- .class1.class2 attr="asdsad"
- attr="asds"
使いたくなる
しかし、3 つのコンポーネントがすべて欠落している場合は一致させたくありません。3 つのオプション コンポーネントのルールを指定するにはどうすればよいですか?ただし、少なくとも 1 つが存在する必要があります。
syntax-highlighting - PEG.js文法からTextMate言語文法を生成します
PEG.js文法をTextMate文法に変換するツールはありますか?
私は自分の言語を構築していて、好みのエディターであるTextMateでその言語の構文を強調表示したいと思っています。私の言語の文法はPEG.jsで構築されています。このユースケースのTextMateドキュメントによると、 PEG.jsと互換性のない形式でTextMate文法を記述する必要があります。
新しいTextMate文法を書き始めましたが、文法全体、または許容可能な構文の強調表示に関連するサブセットを翻訳するのにかなりの時間がかかることにすぐに気付きました。私は信じられないほど怠惰で、このような面倒な作業をすべてやりたくないので、このタスクを自動化することを考えました。
誰かが私にPEG.js文法からのTextMate文法の生成を自動化する方法、または少なくともスピードアップする方法の手がかりを教えてもらえますか?
javascript - このテキスト ファイルの簡単な pegjs 文法を作成するにはどうすればよいですか?
このテキスト ファイルを行に分割し、行を分類したいだけです。行が「Qty」で始まる場合、行が「GST」で始まるまで、次の行は注文品目です。
行が「合計金額」で始まる場合、これが合計金額の行です。
parsing - 左手再帰なしのブール式の解析
これに合わせようとしている
- f(some_thing)は式である関数呼び出しです
- ==はブール演算子です
- 'something else'は文字列であり、式でもあります
したがって、ブール式は
問題は、左再帰なしでそれを行う方法を理解できないことです これらは私のルールです
文法表記法を使用して、私は持っています
私の文法はEOEなので、左手アルゴリズムの使い方がわかりません。
ここで、e は空で、b は端末です
node.js - PEGjs: 浮動小数点ルールが失敗した場合の文字列へのフォールバック (バックトラック?)
atom最初にすべてを数値または引用符で囲まれた文字列として解析しようとするルールがあります。それが失敗した場合は、文字列として扱います。
この非常に特定の文字列である特定のケースを除いて、すべてが正常に解析されます。
DUD 123abc
エラーで解析に失敗しExpected " ", "." or [0-9] but "a" found.ます。
私が期待すること: 正常に解析され、文字列 "123abc" が文字列アトムとして返されるはずです。以下の文法コンテンツで、私の失敗した試みのいくつかがコメントアウトされているのを見ることができます。
ヘルプ/ヒント/ポインター/提案は大歓迎です!
オンライン PEG.js バージョンで文法を試すことができます。ノード v0.8.23 と pegjs 0.7.0 を使用しています
正しく解析される数値:
- `123
- `0
- `0.
- 1.
- `.23
- `0.23
- `1.23
- `0.000
.<--- 数値ではなく、エラーでもない文字列として
123abc文字列として解析したいのですが、可能ですか?
これは私の文法ファイル全体です:
parsing - PEG パーサー: 「オプション」および「1 つ以上」のルールは必要ですか?
PEG パーサーに関するウィキペディアの記事では、次のコンビネーターが定義されています。
これらすべてのコンビネータは本当に必要ですか? Optional と One-Or-More は次のように簡単に実装できるように思えます
私はこれを言っているのは正しいですか、それともこれらの 2 つの形が別々の原子であることを必要とする基本的な何かがあるのでしょうか? 私は独自の PEG パーサーを構築しており、これら 2 つをスキップする (または他のコンビネーターで定義する) と便利ですが、重要なものを見逃していないことを確認したいと考えています。