問題タブ [ebnf]
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.
python - Python: 正規表現を BNF または pyparsing に置き換える
各行がゲーム ユニットを説明する、比較的単純なテキストを解析しています。解析手法についての知識がほとんどないため、次のアドホック ソリューションを使用しました。
正常に動作しますが、正規表現の力の限界に達したと感じています。具体的には、Traits の場合、値は、後で分割してリストに変換する必要がある文字列になります。たとえば、obj.Traits は、このコードでは「Motorized Armored」に設定されますが、後の機能は ('Motorized', 'Armored') に変更されました。
このコードを変換して、EBNF または pyparsing 文法などを使用することを考えています。私の目標は次のとおりです。
- このコードをより簡潔にし、エラーを起こしにくくする
- 値のリストを使用したケースの醜い扱いを回避します(最初に正規表現内で置換を行い、後で結果を後処理して文字列をリストに変換する必要があります)
何を使用し、コードをどのように書き直すかについて、あなたの提案は何ですか?
PS 混乱を避けるために、コードの一部をスキップしました。プロセスにエラーが発生した場合は、申し訳ありません-元のコードは機能します:)
java - EBNF 式を使用したコード ブロックの解析
CocoR を使用して Java のようなスキャナー/パーサーを生成しています。コード
ブロックに一致する EBNF 式を作成する際に問題が発生しています。
コード ブロックが 2 つのよく知られたトークン <& と &> で囲まれていると想定しています。例:
非終端記号を定義すると
2 つのシンボル内のコードに「<」文字が含まれている場合、生成されたコンパイラはそれを処理しないため、構文エラーが発生します。
ヒントはありますか?
編集:
簡単にするために、いくつかの演出を省略しました。
これは文法の私の実際の実装です。主なバグは、ブロック内のコードに記号 '>' または '&' のいずれかが含まれている場合に失敗することです。
ebnf - EBNF 文に 2 つのオペランドがあるのはなぜですか?
この EBNF 文法を持っている
4*+3.5= にこのようなものを入力するオプションがあるのはなぜですか? この文はこの文法にさえありますか? だとしたらどうやって見分けますか?
json - EBNF表記とJSONに関する質問
最近、私はパーサーと文法、そしてそれらがどのように機能するかを研究しています。http://www.ietf.org/rfc/rfc4627.txt
EBNFを使用するJSONの形式文法を読んでいました。私はBNFとEBNFの理解にかなり自信を持っていましたが、どうやらまだ完全には理解していません。RFCは、次のようなJSONオブジェクトを定義しています。
ここでの目的は、任意のJSONオブジェクトが(オプションで)メンバーを持つことができ、その後に0個以上の(値-区切り文字、メンバー)ペアが続くことを表現することであることを理解しています。私が理解していないのは、アスタリスクがの前に表示される理由(value-separator member)
です。アスタリスクは正規表現を模倣するものではないので、アイテムの後に0回以上繰り返されるように表示されますか?JSONオブジェクトの文法は次のように書くべきではありません:
presentation - EBNF プレゼンテーションの例?
電子メディア (つまり HTML)の拡張バッカスナウア形式のプレゼンテーションの良い例を知っている人はいますか?
内容ではなく形式に関する提案を探しています。ルール、端末、および EBNF シンボルを簡単に区別できるように、できるだけ読みやすくすることを目指しています。
java - EBNF/パーボイルド:正規表現をPEGに変換する方法は?
これは、パーボイルド パーサー フレームワークと一般的な BNF/PEG の両方に固有の問題です。
かなり単純な正規表現があるとしましょう
の擬似EBNFを表します
EBNF で非空白 (空白ではない 1 つ以上の文字) をどのように定義しますか?
Java のパーボイルド ライブラリーに精通している人にとって、非空白を定義するルールをどのように実装できるでしょうか?
java - EBNF文法を文脈自由文法に変換する
JavaCUP仕様を作成する必要があり、EBNF文法が与えられました。しかし、私は2つの間で変換する方法がわかりません。基本的な考え方は聞いたことがありますが、何を変える必要があるのか、「ターミナル」とは何かなど、よくわかりません。
誰かが別のものに変換する方法を説明できますか、または私がそれについて読むことができる場所があるかどうか?
context-free-grammar - JavaCUP - EBNF のこの行を CFG 文法に変換するには?
数日前に、EBNF 文法を CFG に変換する方法について投稿しました。さて、私は今それの要点を持っていると思いますが、私はこの特定のものに少し行き詰まっています:
どのように変換しますか:
CFGに?
ここでの私の試みは、末尾の * (0 以上を意味する) を取り除き、それを再帰的な書き方に置き換えることです。
antlr - ステートメントまたはexitステートメントのANTLR文法
私はANTLR文法で次のステートメントを書き留めました:
私が正しく理解している場合、それは私がまたは(statement|exit)*
を持つことができることを意味します。つまり、、または、、または、そうですか?
ステートメントがない場合を除いて、私のパーサーは機能します。
例えば:statement
exit statement
statement_1 exit_1
statement_1
statement_1 statement_2, exit_1
これは機能します:
これも機能します(いいえexit
):
しかし、これは機能しません(いいえstatement
):
私の文法に何か問題がありますか?
c# - 「else」ブロックを定義するにはどうすればよいですか?
これが私が試していることです:
しかし、私はshift-reduce conflict
. 理由はよくわかりません...可能であれば、貪欲に「else」を取得しないでください。「if」ブロックのみが続くようにelseブロックを定義する方法がよくわかりません。
ノードとif_else
ノードを持つブロック ノードが最適だと思います。なぜなら、AST をトラバースしようとするときに、戻って前の兄弟をチェックする必要がないからです。if
else
文法の詳細を確認する必要がある場合は、お知らせください。「ブロック」は基本的に{ blah }
(間の一連のステートメント{}
) として定義されます。
オプションのブロックとして試してみてください:
それも好きじゃない。それでも警告をスローします。