問題タブ [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 - ebnf と空白を使用した pyparse
http://pyparsing.wikispaces.com/file/view/ebnf.pyを使用して、ebnf 定義を変換しています。
ebnf def は次のようになります。
ファイルをロードして、次のような文字列を解析しようとすると:
私は得る:
アイデア/解決策はありますか?
coding-style - 良い EBNF 文法を書くためのヒント
ドキュメント解析用の拡張 Backus–Naur Form 文法を書いています。これらの定義の構文については優れたガイドがたくさんありますが、それらを設計および構造化する方法についてはオンラインではほとんどありません。
最終的な解析ツリーが同等である場合でも、スタイルの要素があるように見えるため、これらの作成にどのようにアプローチするかについて、良い記事 (または一般的なヒント) を提案できますか?
例:
- 改行を明示的にタグ付けするか、単に空白として扱うかを決定しますか?
- 非端末の命名スキーム
- 長い定義でオプションの空白を処理する
- 不適切な構文チェックを使用する場合と一致しないようにする場合
ありがとう、
parsing - EBNF 文法でコメントを解析する方法
言語パーサーの文法を定義するとき、テキストの任意の場所で発生する可能性があるコメント (例: /* .... */) などをどのように処理しますか?
タグ内のタグから文法を構築することは、物事が構造化されている場合にうまく機能するように見えますが、コメントはすべてをスローするようです.
テキストを 2 つのステップで解析する必要があるだけですか? 最初にこれらの項目を削除してから、コードの実際の構造を分解するには?
ありがとう
cobol - このCOBOL文法は--9画像を処理しません
このサイトの文法をjavaccで使用しています。いくつかの画像ステートメントを除けば、正常に機能します。たとえば、----、---、---。99または--9。
それは複数のダッシュが好きではないようです。
私の写真の例をサポートするために、これを何を変更する必要がありますか。
私はめちゃくちゃだ
しかし、何も機能していないようです。どんな助けでも大歓迎です
編集:
これは、この行全体の正規表現ですか?
受け入れたい場合は05 TEST3 REDEFINES TEST2 PIC X(10).
、正規表現を次のように変更します。
これまでの助けに感謝します
grammar - PL/0での「奇数」式
次のEBNF文法(PL / 0のウィキペディアにあります)を考えると、「ODD」キーワードの前にある式は何ですか?簡単な言語を小さなプロジェクトとして実装したいのですが、これが何を意味するのか理解できないようです。私がその言語のコンパイラを正しく書くことができるように、誰かが以前にこれの頭を持っているか、奇妙な表現が何であるかを解釈することができますか?
scala - Antlr は再帰を残しました
postfix、infix、および prefix ルールを EBNF 形式の scala から ANTLR に変換しようとしていますが、infixExpression ルールの左再帰に関連するエラーが表示されます。
問題のルールは次のとおりです。
infixExpression ルールを次のように変更すると:
次に、代わりに不平を言います:
最後に、条件付きで AST にノードを作成して、ルールの左側の部分だけが true の場合にそのレベルを追加しないようにする方法はありますか? 例えば:
のように、次のような階層に従う文法を作成するとしましょう。
解析される式が である場合a || b
、現在作成される AST はこの式に対して
部品だけを取得するにはどうすればよいconditional_or_expression
ですか?
JavaCC では、次のようにノード アリティを設定できます。#ConditionalOrExpression(>1)
編集: 昨夜は少し遅くなりましたが、中置式が適切に変更されました!
最終編集:最終的に機能させる方法は、次のルールでした。
grammar - BNFからEBNFへの変換
次のBNFをEBNFに変換する方法を知る必要があるので、それらがどのように機能するかを理解するのに役立ちます
注:イプシロンは空のセットを意味します
javascript - EBNF 構文パーサー モジュール
トークンのリストとEBNFのような文法 (単純な文字列として渡される) を指定すると、解析されたツリーを返す構文パーサー モジュール (Ruby、Python、Javascript で作成されたもの) を知っていますか? これに最も近いのはSimpleParseです。これは優れたライブラリですが、残念ながら、単一ステップの解析 (トークン化なし) を使用しています。可能であれば、実装が言語自体と絡み合っているライブラリ ( pyparsing、treetop、...) は使用したくありません。
利用可能なライブラリがたくさんあるため (そして、独自のライブラリを作成することも非常に簡単です)、字句解析/トークン化については心配していませんが、ENBF パーサーの実装は簡単な作業ではありません。私はPython wiki LanguageParsingをチェックし、それらのいくつかを無駄にテストしました(探しているものを見落としている可能性があります。たくさんあります...)
parsing - LALR パーサー用に EBNF を BNF に変換する
似たようなタイトルの投稿がいくつかあることは知っています。ほとんどが死んだサイトへのリンクです - とにかく、もっと具体的な質問があります。
Bison 互換の文法ファイルを簡単に作成できるように、XPath 仕様の EBNFをストレート BNFに変換しようとしています。
これを行ってからしばらく経ちましたが、再帰がプロダクションのどちら側に属しているか覚えていません。私はそれが左だと思っていました - しかし、私の「単純な」翻訳は、Bison が生成したパーサーを実行すると、単純なジェーン XPath 式で構文エラーを引き起こします。
だから誰かが私をユーモアを交えて考えてくれるなら - だから私は幽霊を追いかけていない.
以下のExpr
ルールでは:
これは正しい翻訳ですか?(再帰を左に置く):