2019년 11월 20일 작업

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. 실험, 파서는 모든 입력 기호 문자열이 유효한 표현하지 분석, 실행을 형성 할 수있다.

추천

출처www.cnblogs.com/chuichuichui1998/p/11914414.html