1. 문법 G (S)
(1) S -> AB
(2) A -> 다 | ε
(3) B -> CC
(4) C -> AADC | ε
(5) D -> B | ε
문법 G (S)는 LL (1) 문법 아니다 확인?
해결 방법 :
FIRST 集 :
FIRST (다) = {B, A}
FIRST (E) = E {}
FIRST (AADC) = {A}
FIRST (b) = {B}
FOLLOW 集 :
FOLLOW (A) = FIRST (B) + FIRST (B) + FIRST (B) + FOLLOW (C) = {C, A, B, #}
FOLLOW (C)} = {#
FOLLOW (D) = {A, #}
SELECT 세트 :
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-> ε) ≠ ∅
따라서이 문법하지 LL (1) 구.
식 문법은 LL (1) 문법인지 왼쪽 재귀의 제거 후 2 (마지막 작업)?
이것은 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. 실험, 파서는 모든 입력 기호 문자열이 유효한 표현하지 분석, 실행을 형성 할 수있다.