귀속 하강 식별기-컴파일링 원리

1938 단어 컴파일링 원리
작업용 단순화 반복 감소 인식기:
예:
문법 G[S]:
S-> A|B
A->aM
M->A|#
B->bN
N->B|#
 
①문법은 좌귀속을 포함하지 않는다
 
 
=>#
First
follow
S
아니요
{a,b}
#
A
아니요
{a}
#
B
아니요
{b}
#
M
예.
{a,#}
#
N
예.
{b,#}
#
 
 
①문법은 좌귀속을 포함하지 않는다
② M N은 #까지 생성되므로 다음을 수행합니다.
First(A) ∩ follow(M) = ∅
First(B) ∩ follow{N} = ∅
③ S, A, B의 생성식에 #이 없으므로
First(A) ∩first(B) = ∅
First{aM}={a}
First{bN} ={b}
 
따라서 이 문법은 LL(1) 판단에 부합된다
 
반복 감소 분석:
Select(S->A) = {a}
Select(S->B)={b}
Select(A->aM)={a}
Select(M->A)={a)
Selec(M->#)=(#)
Select(B->bN)={b}
Select(N->B)={b}
Select(N->#)={#}
 
Void praseS(){
    Switc(lookahead){
        Case a:
            ParseA();
            Break;
        Case b:
            ParseB();
            Break;
        Defalut:
            Print(“error”);
            Exit();
    }
}
Void praseA(){
    Switc(lookahead){
        Case a:
            MatchToken(a)
            ParseM();
            Break;
        Defalut:
            Print(“error”);
            Exit();
    }
}

Void praseB(){
    Switc(lookahead){
        Case b:
            MatchToken(b)
            ParseN();
            Break;
         Defalut:
            Print(“error”);
            Exit();
    }
}

Void praseM(){
    Switc(lookahead){
        Case a:
            ParseA();
            Break;
        Case #:
            MatchToken(#)
            Break;
        Defalut:
            Print(“error”);
            Exit();
    }
}


Void praseN(){
    Switc(lookahead){
        Case b:
            ParseB();
            Break;
        Case #:
            MatchToken(#)
            Break;
        Defalut:
            Print(“error”);
            Exit();
    }    
}

좋은 웹페이지 즐겨찾기