6

從我的計算機語言課程開始已經有幾年了,所以我忘記了BNF和EBNF的更精細的點,而且我旁邊沒有教科書。具體來說,我忘記了如何將EBNF轉換爲BNF。將EBNF轉換爲BNF

從我記得的事情來看,我知道其中的一個要點是將{ term }轉換爲<term> | <many-terms>。但我不記得其他規則。我試圖在網上查看這些內容,但我只能找到指向任一作業問題的鏈接,或者關於使用大括號轉換術語的小評論。我無法找到定義翻譯的詳盡規則列表。

回答

16

請參看下面的鏈接,它包含了每一個需要轉換的生產指令:

http://lampwww.epfl.ch/teaching/archive/compilation-ssc/2000/part4/parsing/node3.html

建築解析器(尤其是自下而上)一BNF語法往往更好,比EBNF。但它很容易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'.

+0

完美!這正是我需要的。有人我從來沒有找到鏈接! – 2010-03-18 01:11:06

+1

我現在在那個鏈接上有404 ...任何想法,如果有更新的版本的地方? – Steve 2012-01-30 04:26:00

+0

唉,不是我的頭頂。希望頁面能夠回來。 – 2012-01-30 18:00:59