2014-10-01 43 views
0

嗨我遇到了很多麻煩,我遇到了很多網站,但發現這個帖子How to convert BNF to EBNF是非常有用的,但我不知道從哪裏開始這個例子。EBNF規則到BNF

<decimal_literal> --> (0|1|2|3|4|5|6|8|9){0|1|2|3|4|5|6|7|8|9|_} 

在這個規則中括號和花括號是metsymbols。它需要超過1條規則,可能需要引入1個或多個新的非終端。

這是我正在使用的教科書http://umsl.edu/~mfrp9/misc/cpl.pdf第131頁顯示了一個示例,但我無法將其應用於此問題。如果有人可以請一步一步解釋這個問題的解決方案,所以我可以學習它來做類似的問題,非常感謝。

+0

您交叉引用的問題是從BNF轉換爲EBNF。您的問題標題顯示您正試圖從EBNF轉換爲BNF。你想要做什麼?如果目標是BNF,那麼BNF的哪個方言?如果目標是EBNF,那麼你的意思是標準EBNF(如ISO 14977:1996)還是其他一些EBNF方言? – 2014-10-01 04:45:12

+0

是的,我正在尋找轉換EBNF爲BNF,但被告知,如果它可以轉換一種方式,那麼它可以轉換另一種方式。我無法找到EBNF到BNF的任何內容,所以我用這篇文章作爲指導。是標準EBNF。 – Noobie 2014-10-01 04:53:48

+0

是的,它可以被轉換,但問題是「BNF的哪個方言」?我想這個答案是「在書中」。 – 2014-10-01 04:55:39

回答

0

這看起來似乎是合理的翻譯,從本書的p131翻譯到BNF。

<decimal_literal> ⟶ <decimal_digit> 
    | <decimal_literal> <decimal_digit_or_underscore> 

<decimal_digit> ⟶ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 

<decimal_digit_or_underscore> ⟶ <decimal_digit> | _ 
+0

我明白,但我們怎麼分裂?由於可以省略或重複的表達式可以用大括號{...}表示。 – Noobie 2014-10-01 05:24:10

+0

如果你願意,你可以自己動手;這是我做這件事的方式。書中p131中的BNF沒有顯示任何重複使用'{...}';這是一個EBNF符號。由於您正在從EBNF轉換爲BNF,因此您必須刪除像EBNF這樣的結構(如{{}}並轉換爲BNF。 – 2014-10-01 05:24:42

+0

嗨,感謝您的幫助喬納森,我發佈了另一個簡單的問題,我想看看我的解決方案是否正確,如果您有第二個問題,請看看。 http://stackoverflow.com/questions/26134894/bnf-to-standard-ebnf – Noobie 2014-10-01 05:51:51