2017-10-21 83 views
0

在試圖解決編程語言主題中的以下練習時,我知道我的答案不能創建字符串201,但我無法想象如何解決這個例外。一組不爲0開頭的正整數,除了0

問題:L(G)是一組不爲0開始的正數十進制數,除零以外。設計語法G.

我的回答:

G is: 
    S -> Digit 
    NonZeroDigit -> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 
    Digit -> 0 | NonZeroDigit | NonZeroDigit 0 | NonZeroDigit Digit 

檢查正確性:

Digit => 0 
Digit => NonZeroDigit => 1 
Digit => NonZeroDigit Digit => 2 Digit => 20 

如果我添加Digit -> Digit Digit,它會創建Digit => Digit Digit => Digit Digit Digit => 201,但是這也可以創建Digit => Digit Digit => Digit Digit Digit => 000。什麼?

如何更改我定義的語法以便符合條件?

回答

1

爲什麼不只是拆分n = 0和n> 0?

S -> 0 | posDig digit 
posDig -> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 
digit -> digit digit | 0 | posDig | <epsilon> 

除了S中的(posDig digit),你也可以說例如數字(tho 1到9現在也是一個數字) 從那裏開始,你只需要確保第一個數字不是

+0

哇,非常非常清晰的解決方案。謝謝:D – youngminz