2017-10-21 30 views
0

En essayant de résoudre les exercices suivants dans des langages de programmation, je sais que ma réponse ne peut pas créer de chaîne 201, mais je ne peux pas imaginer comment résoudre cette exception.Un ensemble d'entiers positifs qui ne commencent pas par 0, excepté 0

Problème: L (G) est un ensemble de nombres décimaux positifs qui ne commencent pas par 0, sauf zéro. grammaire Design G.

Ma réponse:

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

Verifiez:

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

Si j'ajoute Digit -> Digit Digit, cela créerait Digit => Digit Digit => Digit Digit Digit => 201, mais cela peut aussi créer Digit => Digit Digit => Digit Digit Digit => 000. Quelle?

Comment puis-je changer la grammaire que je définis pour pouvoir répondre à la condition?

Répondre

1

Pourquoi ne pas simplement diviser n = 0 et n> 0?

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

Au lieu de (chiffre posDig) dans S, vous pourriez également dire par ex. À partir de là, vous devez juste vous assurer que le premier chiffre n'est pas

+0

Wow, solution très très claire. Merci: D – youngminz