EBNFからBNFへの変換
-
20-09-2019 - |
質問
コンピュータ言語のクラスから数年が経っているので、BNF と EBNF の細かい点を忘れており、隣に教科書もありません。具体的に言うと、EBNFをBNFに変換する方法を忘れてしまいました。
私が少し覚えている限りでは、主要なポイントの 1 つは変換することであると知っています。 { term }
の中へ <term> | <many-terms>
. 。しかし、他のルールは覚えていません。これをオンラインで調べようとしましたが、宿題の質問へのリンクか、中かっこでの用語の変換に関する小さなコメントのいずれかへのリンクしか見つかりません。翻訳を定義するルールの完全なリストが見つかりません。
解決
次のリンクを参照してください。このリンクには、変換する必要がある各プロダクションの手順が含まれています。
http://lampwww.epfl.ch/teaching/archive/compilation-ssc/2000/part4/parsing/node3.html
パーサー (特にボトムアップ) を構築する場合、多くの場合、EBNF よりも BNF 文法の方が優れています。ただし、EBNF 文法を BNF に変換するのは簡単です。
すべての繰り返しを変換する
{ E }
新しい非ターミナルへX
そして追加しますX = ε | X E.
すべてのオプションを変換する
[ E ]
新しい非ターミナルへX
そして追加しますX = ε | E.
(変換できます
X = A [ E ] B.
にX = A E B | A B.
)すべてのグループを変換する
( E )
新しい非ターミナルへX
そして追加しますX = E.
同じ非ターミナルを持つ複数のプロダクションを用意することで、代替手段をなくすこともできます。
X = E | E'.
になるX = E. X = E'.
他のヒント
は、警告さ:それはISO規格に記載されていますEBNFとしてもBNF相当を持っていない構文規則に例外が含まれています。 500によって与えられる変換 - 内部サーバーエラーのみRBNF / ABNFと重なるEBNFの部分のために働く