2017-10-21 3 views
0

を除き、0で始まらない正の整数の集合、私は私の答えは、文字列201を作成することはできません知っているが、私は解決する方法を想像することはできませんこの例外。プログラミング言語科目で、次の演習を解決しようとしますが0

問題:L(G)は、ゼロ以外は、0で始まらない正の10進数の集合です。デザイン文法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桁)の代わりに、たとえば次のように指定することもできます。番号(1〜9カントーは、今にも数になります) そこから上は、あなただけの最初の桁が

+0

うわー、非常に非常に明確な解決策ではないことを確認する必要があります。ありがとう:D – youngminz

関連する問題