★ 하향식 파싱 (top-down)
★ 알고리즘
-> X - 스택의 top symbol , a - 포인터 ip 가 가르키고 있는 input symbol , M - 파싱테이블
repeat (반복)
if X가 터미널이면
if X = a 면
pop X 하고 포인터 ip가 입력의 다음 심볼을 가르킴
else error()
else (X가 넌터미널)
if M[X, a] = X->Y1 Y2...Yk then begin
pop X;
push Yk Yk-1....Y1, Y1이 스택의 탑에 위치
output the production X->Y1 Y2...Yk
end
else error()
until X = $;
1 .터미널이면 스택의 탑 심볼과 ip가 가리키는 심볼 비교 같으면 둘다 pop 아니면 error
2. 넌터미널일 경우 스택의 top심볼을 pop 후, 파싱테이블에서 넌터미널에 맞는 입력 기호를 대조하여 찾은 문법을 넣어준다(단 처음심볼을 pop으로). 그리고 넣은 문법을 출력한다.
3. 터미널 넌터미널이 아닐경우 error()
4. X = $를 만날때까지 반복
★ 상향식 파싱(bottom-up)
★ 알고리즘
-> 입력문자열 가리키는 포인터 ip, ip가 가리키고 있는 기호 a. 스택의 맨 위의 상태를 s
ip를 입력문자열의 처음 기호에 설정한다.
repeat forever begin
if action[s,a] = shift s'면 begin
스택에 a 푸시하고, 다음에 s' pop
ip를 다음의 입력 기호로 보낸다.
end
else if action[s.a] = reduce A->b then begin
스택에서 2*|b|개수의 기호를 제거
스택의 맨 위의 상태를 s'라고 함.
스택이 A를 푸시하고, 다음에 goto[s', A]를 pop
생성규치 A->b를 출력
end
else if action[s,a] = accept then
return
else error()
end
처음에 스택의 맨 위에 초기상태를 넣고 입력 버퍼에 입력문자열을 넣는다. 그리고 accept나 오류를 만날 때까지 무한반복.
'공부 > compiler' 카테고리의 다른 글
6. 중간코드 생성(Intermediate code generation) (0) | 2011.06.14 |
---|---|
5. 구문 중심 번역 (Syntax-Directed Translation) (0) | 2011.06.14 |
3. 형태소 분석 (0) | 2011.06.11 |
2. 형태소분석~~~~중간코드생성 (0) | 2011.06.11 |
1. 컴파일러에 대해서 (0) | 2011.06.11 |