從我的計算機語言課程開始已經有幾年了,所以我忘記了BNF和EBNF的更精細的點,而且我旁邊沒有教科書。具體來說,我忘記了如何將EBNF轉換爲BNF。將EBNF轉換爲BNF
從我記得的事情來看,我知道其中的一個要點是將{ term }
轉換爲<term> | <many-terms>
。但我不記得其他規則。我試圖在網上查看這些內容,但我只能找到指向任一作業問題的鏈接,或者關於使用大括號轉換術語的小評論。我無法找到定義翻譯的詳盡規則列表。
從我的計算機語言課程開始已經有幾年了,所以我忘記了BNF和EBNF的更精細的點,而且我旁邊沒有教科書。具體來說,我忘記了如何將EBNF轉換爲BNF。將EBNF轉換爲BNF
從我記得的事情來看,我知道其中的一個要點是將{ term }
轉換爲<term> | <many-terms>
。但我不記得其他規則。我試圖在網上查看這些內容,但我只能找到指向任一作業問題的鏈接,或者關於使用大括號轉換術語的小評論。我無法找到定義翻譯的詳盡規則列表。
請參看下面的鏈接,它包含了每一個需要轉換的生產指令:
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'.
完美!這正是我需要的。有人我從來沒有找到鏈接! – 2010-03-18 01:11:06
我現在在那個鏈接上有404 ...任何想法,如果有更新的版本的地方? – Steve 2012-01-30 04:26:00
唉,不是我的頭頂。希望頁面能夠回來。 – 2012-01-30 18:00:59