14

コンピューター言語の授業から数年が経ち、BNF や EBNF の細かい点を忘れてしまい、教科書が手元にありません。具体的には、EBNF を BNF に変換する方法を忘れてしまいました。

私が少し覚えていることから、主なポイントの 1 つは改心することであることがわかります。

{ term }

の中へ

<term> | <many-terms>

でもそれ以外のルールは覚えていません。これをオンラインで調べようとしましたが、宿題の質問へのリンク、または中括弧で用語を変換することに関する小さなコメントしか見つかりません。翻訳を定義するルールの完全なリストが見つかりません。

4

2 に答える 2

26

このページを参照してください。変換が必要な各プロダクションの手順が含まれています。

EBNFからBNFへ


パーサー (特にボトムアップ) を構築する場合、BNF 文法は EBNF よりも優れていることがよくあります。しかし、EBNF Grammar を 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'.

于 2010-03-17T23:27:10.177 に答える