問題タブ [bnf]
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.
c - プログラミング言語 C の圧縮されていない非最小文法
プログラミング言語は文法によって定義されます。たとえば、Java は JLS で定義されています。こちらを参照してください。
これは最小限の「圧縮された」文法であり、構成要素が 2 回使用されることはありません。結果は - 私にとっては - MethodDeclaratorRestのような役に立たない文法記述であり、ここでわかるようにMethodOrFieldDeclに追加されます。アプローチ"
これは一般的には問題ありませんが、タイプMethodDeclarationのすべての必要な情報がリストされている次のような文法が必要です。これを「トップダウンアプローチ」と呼びます。
「トップダウンの文法アプローチ」を検索して、「最小限の圧縮されたアプローチ」を使用して、Pete Jinks の Web サイトを見つけました。
ここで、「トップダウンアプローチ」を使用して、プログラミング言語 C の文法定義を作成したいと思います。
regex - テキストエディタの文法を定義する最良の方法は何ですか?
私はマゾヒスティックに Mac 用のオープンソースのテキスト エディターを作成しており、最終的にシンタックス ハイライトを追加したいところまで来ました。私は過去数日間、さまざまな解決策を行ったり来たりしてきましたが、最終的に、この質問をより多くの聴衆に公開することにしました。
ここに私が見るオプションがあります:
- 基本的に一連の正規表現パターン マッチングを使用して言語を定義します (TextMate が言語を定義する方法と同様)。
- BNF や PEG などの正式な文法で言語を定義する
正規表現パターン マッチングを使用することは、正式な文法とほぼ同じくらい言語を正式に表すことができないため、理想的とは言えません。ただし、形式的でない言語の中には、BNF に適合するのに苦労するものもあります (つまり、Markdown - ただし、優れたPEG 実装があることは知っています)。
ライブ構文強調表示のパフォーマンスのトレードオフは何ですか? 幅広い言語に対する柔軟性はどうですか?
私が BNF ルートに行くとすれば、Todd Ditchendorf が素晴らしいParseKitフレームワークを作成しました。PEGに似たものを知っている人はいますか?
yacc - BNF: 入力が間違った非終端に行く
私はチェス代数表記の BNF を開発していて、興味深いケースに遭遇しました。入力が間違った非端末に行きます。
私の開始 BNF ルールは次のとおりです (これには意図的にキャスリングやメモが含まれていないことに注意してください)。
piece
、start_position
、capture
、およびpromotion
は空にすることができるため、「d4」のような移動が可能になります。問題は、そのような移動が入力されると、入力 ('d4') が によって取得されるstart_position
ため、エラー b/c there is no more input forend_position
が発生することです。空にすることはできません。
明らかなハック/回避策は、end_position
空にすることを許可し、それに対する入力があるかどうかを確認し、それに応じて行動することです。
これはうまくいきますが、これに対処する方法があるかどうか知りたいです。式全体が一致しない場合、入力が最初に一致するシンボルに移動しない可能性はありますか?
別の質問は、これが BNF の標準的な動作なのか、それとも私が使用している yaccer の問題なのかということです: PLY v 3.3.
flex/bison を使用してみましたが、同じ結果が得られました。そのため、PLY に固有のものではないようです。
完全を期すために関連するすべてのルールを次に示します。
grammar - 次の BNF 文法を検討してください
次の BNF 文法を考えてみましょう (非終端記号は山かっこで囲まれ、<identifier>
有効な Java 変数識別子に一致します)。
次の式の導出 3 を生成します。
exp で見つめる:
exp を項に置き換えます。
用語を次のように置き換えます。
項を係数に置き換えます:
両方の要素を (exp) に置き換えます。
最初の exp を exp - term に置き換え、2 番目を exp + term に置き換えます
両方の exp を項に置き換えてから、4 つの項すべてを因子に置き換えます。
すべての要素を識別子に置き換えます
これで十分ですか?
parsing - Unix コマンド ライン オプションの文法
これは宿題の質問です。Unix コマンド ライン オプション用の簡単なパーサーを書きたいと思います。
まず、BNF で文法を定義したいと思います。
(ここでの「任意の文字」は任意の英数字です)。
それは理にかなっていますか?次の質問は、単一のハイフンで始まり、グループ化できる「古い」Unix オプションを追加する方法です (例: ls -lht
)
xml - sphinx4 は文法を構築するためにどのような方法を使用しますか?
sphinx4
文法を構築するためにどのような方法を使用しますか? XML
または拡張BNF
?
parsing - この BNF 文法を変更して、常に奇数の犬が含まれるようにできますか?
この BNF 文法を変更して、常に奇数の犬が含まれるようにできますか?
「ペット」の例:
「ペット」の例ではありません:
bnf - BNF再帰のベースケースとして空の文字列?
私は授業の練習問題として小さな文法を書いていますが、私の教授は、法的なBNF表現の条件についてあまり具体的にしていませんでした。
BNF文法は、次の形式の文字列を認識することになっています:AB、AABB、AAABBB、A ... B ...(一般的な形式:AnBn)
だから、私が立ち上がったのは次のように書いていました。
私の単純なyes/noの質問は、これがBNFで合法であるかどうか、そして合法でない場合はその理由です。
<...>は非終端記号を表します、それが慣例であるかどうかはわかりません
parsing - BNF 文法があいまいであるかどうかを判断する最も簡単な方法は何ですか?
つまり、特定の文法の完全な言語を自動的に表示するツールはありますか?
antlr - ANTLRと他の形式のBNFの間で変換するためのツールはありますか?
ANTLR文法構文を他のBNF構文との間で変換するためのツールはありますか?バッカス・ナウア記法(BNF、EBNF、ABNF、W3C-BNF、XBNF ...)には、仕様のあるいくつかの形式があります。たとえば、このリストを参照してください。ANTLR文法構文は、例によってのみ説明されているようです。ANTLR文法ファイルには文脈自由構文の仕様以上のものが含まれていることは知っていますが、少なくとも共通のサブセットを変換できるはずです-誰かがまだ自動的に行ったことがありますか?