2017-10-21 14 views
0

프로그래밍 과목에서 다음 연습 문제를 해결하는 동안 문자열 201을 만들 수 없다는 것을 알고 있지만 해결 방법을 상상할 수는 없습니다. 이 예외.0을 제외한 0으로 시작하지 않는 양의 정수 집합

문제점 : L (G)는 0 이외의 0부터 시작하지 않는 양수 십진수입니다. 디자인 문법 G.

내 대답 :

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

확인 정확성 : 나는이 Digit -> Digit Digit를 추가 할 경우

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

, 그것은 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 자릿수) 대신에 예를 들어 다음과 같이 말할 수 있습니다. 번호 (tho 1에서 9까지 숫자가됩니다) 거기에서 첫 번째 숫자가 0이 아닌지 확인해야합니다.

+0

와우 매우 명확한 해결책입니다. 고마워요 : D – youngminz