38

言語の構文を考え出そうとしています。私はこれらの 3 つについて少し読んだことがありますが、ある人ができて別の人ができないことは実際にはわかりません。どちらか一方を使用する理由はありますか? それとも単に好みの問題ですか?

4

6 に答える 6

36

EBNFABNFは、文法を開発しながら、より簡潔で表現力を高めるのに役立つ拡張機能として考える必要があります。

たとえば、オプションの非終端記号について考えてみましょう。BNF文法では、次のような中間記号を使用して定義します。

A        ::= OPTIONAL OTHER
OPTIONAL ::= opt_part | epsilon

EBNFを使用すると、オプションの構文を使用して直接実行できます。

A ::= [opt_part] OTHER

次に、BNFで優先順位を表現する方法がないため、ネストされた選択肢にも常に中間シンボルを使用する必要があります。

BNF
A ::= B C
B ::= a | b | c

EBNF
A ::= (a | b | c) C

これは、 EBNFまたはABNF文法で許可されている多くの構文の問題に当てはまります。構文シュガーのおかげですが、通常のBNFでは許可されていません。ABNFEBNFを拡張し、一緒に見つけることができるシンボルの出現回数を指定するなど、より複雑なことを行うことができます (つまり4*DIGIT)

したがって、文法の選択言語としてABNFまたはEBNFを選択すると、作業が容易になります。これは、パーサー ジェネレーターによって生成される無駄な記号で文法を埋めることなく、より表現力を高めることができるためです。彼ら!

于 2010-04-04T16:46:50.117 に答える
2

EBNF は BNF の拡張/新しいバージョンであるため、問題はより単純になります: EBNF と ABNF です。私は専門家ではありませんが、構文を定義する言語に依存する必要があると思います。また、EBNF 用のビジュアライザーもいくつかあります ( http://www.google.co.il/search?sourceid=chrome&ie=UTF-8&q=Ebnf-Visualizer ) が、ABNF 用のものは見当たりませんでした。

于 2010-04-04T16:50:26.993 に答える
1

妥当な選択としては、ISO 標準である EBNF を使用することをお勧めします: ISO/IEC 14977 : 1996(E) [pdf]。例として、OMG のUML Human-Usable Textual Notation に使用されています。

于 2014-02-16T15:02:59.640 に答える
0

それらのいずれを使用しても目的を達成できますが、言語が構成する機能に応じて、言語を表すのにそれぞれが簡潔で効果的です。

ウィキペディアからBNFEBNF、およびABNFを読みました。いくつかの違いと、BNFに基づいてEBNFとABNFが登場した理由について説明しています

于 2010-04-04T16:29:53.107 に答える