1. 문법 G (S)
(1) S -> AB
(2) A -> 다 | ε
(3) B -> CC
(4) C -> AADC | ε
(5) D -> B | ε
문법 G (S)는 LL (1) 구문없는 확인.
解 : SELECT (A -> 다) = {B, A}
SELECT (A -> ε) = {C, B, A, #}
SELECT (C -> AADC) = {A}
SELECT (C -> ε)} = {#
SELECT (D -> B) = {B}
SELECT (D -> ε) = {A, #}
. · · SELECT (A -> 다) ∩ SELECT (A -> ε) ≠ Ø
SELECT (C -> AADC) ∩ SELECT (C -> ε) = Ø
SELECT (D -> B) ∩ SELECT (D -> ε) = Ø
. · · G (S)가 아닌 LL (1) 문법
식 문법의 제거 후 2. 만약 LL (1) 문법 재귀 남아 있는가?
해결 방법 : E -> TE '
E '-> + TE'| 전자
T -> FT '
T '-> * FT'| ε
F -> (E) | 나는
SELECT (E '-> + TE') -> {+}
SELECT (E '-> ε) -> {#}
SELECT (T '-> * FT') -> {*}
SELECT (T '-> ε) -> {#}
SELECT (F -> (E)) -> {(}
SELECT (F -> I) -> {난}
· ·. SELECT (E '-> + TE') ∩ SELECT (E '-> ε) = O
SELECT (T '-> * FT') ∩ SELECT (T '-> ε) = Ø
SELECT (F -> (E)) ∩ SELECT (F -> I) = Ø
· IS LL (1) 문법
제 2 연결,이 LL 인 경우 (1) 문법 그 재귀 하강 파서 코드 물품.
이자형()
{티();
이자형'();
}
이자형'()
티()
티'()
에프()
프로그램 코드의 분석 :
보이드 ParseE () {
Frset ();
ParseE '();
}
보이드 ParseT () {
ParseF ();
Frset '();
}
보이드 ParseE '() {
(내다) 스위치 :
케이스 + :
경기 토큰 (+);
Frset ();
ParseE '();
단절;
사건 번호 :
단절;
경우) :
단절;
태만:
의 printf ( 'SYNAX 오류 \ n!');
출구 (0);
}
보이드 ParseF () {
(내다) 스위치 :
경우 (:
경기 토큰 (();
ParseE ();
MatchToken ());
단절;
난을 케이스 :
(의) 일치 토큰;
단절;
태만:
의 printf ( 'SYNAX 오류 \ n!');
출구 (0);
}
보이드 ParseT '()
{
(내다) 스위치 :
사례 * :
ParseF ();
경기 토큰 (*);
Frset '();
단절;
사건 번호 :
단절;
경우) :
단절;
케이스 + :
단절;
태만:
의 printf ( 'SYNAX 오류 \ n!');
출구 (0);
}
어휘 분석기를 추가 4. 실험, 파서는 모든 입력 기호 문자열이 유효한 표현하지 분석, 실행을 형성 할 수있다