質問

コンピュータ言語のクラスから数年が経っているので、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の部分のために働く

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top