분석 LL (1) 문법, 재귀 하강 파서 - 작업 (11)

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

 

 

추천

출처www.cnblogs.com/chenhaowen-shuaishuaide/p/11887872.html