728x90
컴파일러구성 - [제6장] Context-free 문법의 효율화
유도 트리 모호성 Context-free 문법의 효율화 푸시다운 오토마타
컴파일러 용어정리
요점정리
- context-free 언어는 자연언어를 표현하기 위해 도입되었으며, 정규언어보다 표현범위가 넓어서, 이것을 인식하는 푸시다운(push-down) 오토마타를 구현하는 일은 유한 오토마타를 구현하는 일보다 훨씬 복잡하고 어렵다.
- 유도 과정의 각 단계에서 문장형태의 가장 왼쪽에 있는 논터미널 기호를 계속해서 대체하는 경우를 좌단유도(leftmost derivation)라 하며, 반대로 가장 오른쪽에 있는 논터미널 기호를 계속해서 대체하는 경우를 우단유도(rightmost derivation)라 한다.
- 구문분석의 방법은 크게 두 종류가 존재하며, 하나는 Top-down 구문분석이고 다른 하나는 Bottom-up 구문분석이다. 또한 구문분석을 하는 과정은 문장이 유도되는 과정을 트리형태로 표현하는데, 이를 유도트리(derivation tree) 또는 파스트리(parse tree)라 한다.
- 문장이 효율적으로 인식되기 위하여 context-free 문법이 가지고 있는 비효율적인 부분들인 모호성, 불필요한 생성규칙, 모호성, ε-생성규칙, 단일 생성규칙, backtracking, left-recursion 등을 제거해야 한다.
- 불필요한 기호(useless symbol)는 터미널 문자열을 생성할 수 없는 논터미널 기호이거나 또는 시작기호로부터 도달 불가능한(unaccessible) 기호를 말한다.
- 모호한 문법은 연산자의 우선순위(precedence)와 결합법칙(associativity)을 이용하여 모호하지 않은 문법으로 바꿀 수 있다.
- backtracking은 같은 기호들을 prefix로 갖는 2개 이상의 생성규칙이 존재할 경우 발생하는데 이를 해결하기 위하여 left-factoring을 해야 한다. left-factoring은 공통된 prefix를 인수분해 하는 것이다.
- 푸시다운 오토마타는 유한상태 제어(finite state control)와 입력 테이프(tape) 외에 무한정의 용량을 가진 스택(stack)으로 구성되며, 비결정적 오토마타(NPDA : Nondeterministic Push-Down Automata)와 결정적 오토마타(DPDA : Deterministic Push-Down Automata)의 두 종류가 있다.
연습문제
- 다음은 정규언어와 Context-Free-언어에 대한 설명이다. 물음에 답하시오.
‘가’에 적당한 것은 ?- IF A = B THEN C := D ELSE E := D
정규언어는 IF, A, =, B, ... 등의 단어들을 표현하는 것이고 ( 가 ) 는 전체문장이 IF - THEN - ELSE 문장이라는 것을 표현하는 것이다.
- 정답 :
- ②
- 문장은 Context-Free 언어로 표현한다.
- IF A = B THEN C := D ELSE E := D
- (2~3번 문제)다음 문법을 보고 물음에 답하라
다음은 aaaa를 좌단유도하는 과정이다. 빈 칸에 알맞은 것은?- <문법>
1) S --→ aAS
2) S --→ a
3) A --→ SbA
4) A --→ SS
5) A --→ b
- <문제>
S => aAS
=> ( )
:
=> aaaa
- 정답 :
- ④
- 좌단 유도이므로 다음과 같이 왼쪽이 먼저 유도된다.
S => aAS
=> aSSS
=> aaSS
=> aaaS
=> aaaa
- <문법>
- (2~3번 문제)다음 문법을 보고 물음에 답하라
다음은 aaaa 를 우단유도하는 과정이다. 빈 칸에 알맞은 것은?- <문법>
1) S --→ aAS
2) S --→ a
3) A --→ SbA
4) A --→ SS
5) A --→ b
- <문제>
S => aAS
=> ( )
:
=> aaaa
- 정답 :
- ①
- 우단 유도이므로 다음과 같이 오른쪽이 먼저 유도된다.
S => aAS
=> aAa
=> aSSa
=> aSaa
=> aaaa
- <문법>
- 다음의 문법을 보고 답하라.
위 문법의 특성은?- 연습문제 설명
- E --→ E + E | E * E | id id --→ 숫자
- 정답 :
- ①
- id + id * id 를 우단유도하면 다음과 같이 두가지 유도트리가 생성되므로 이 문법은 모호하다.
E → E + E
→ E + E * E
→ E + E * id
→ E + id * id
→ id + id * id
E → E * E
→ E * id
→ E + E * id
→ E + id * id
→ id + id * id
- 다음 문법을 ε-free 문법으로 바꾸려 한다. 빈칸에 알맞지 않은 것은?
- 연습문제 설명
- P : S --→ bSaS | ε
=> P'는
S' --→ S | ε
S --→ ( )
- 정답 :
- ②
- S --→ ε을 대입하여 풀이해 보면 bSaS, baS, bSa, ba
SaS 는 생성되지 않는다.
- 생성규칙의 오른쪽이 단 한 개의 논 터미널로 구성된 것은?
- 정답 :
- ③
- 단 한 개의 논 터미널로 구성되어 있는 생성규칙들을 단일 생성규칙이라고 하며 효율을 떨어뜨리므로 제거해 주어야 한다.
- 다음 문법과 관계없는 것은?S → cAd
A → a|ab- 정답 :
- ③
- backtracking 이 발생하며 left-factoring을 해 주면 문제가 해결된다.
단일생성규칙은 없다.
- 다음은 주어진 문법에서 left-recursion을 제거하는 과정이다.
빈칸 ‘가’ 에 알맞은 것은 ?- 연습문제 설명
- E --→ E * T ∣ T
T --→ T + F ∣ F
F --→ id
====>
E --→ TE'
E’--→ ( 가 )
- 정답 :
- ③
- E --→ TE'
E’--→ (*TE' ∣ ε)
T --→ FT'
T'--→ +FT' ∣ ε
F --→ (E) ∣ id
- 푸시다운 오토마타는 7개의 요소로 구성된다.
다음 설명 중 틀린 것은 ?- 연습문제 설명
- M = (Q, ∑, T, δ, q0, z0, F)
- 정답 :
- ④
- 푸시다운 오토마타는 7개의 요소로 구성된다.
M = (Q, ∑, T, δ, q0, z0, F)
여기서
z0 ∈ T : 스택의 시작기호
'컴퓨터과학[3-2] > 컴파일러' 카테고리의 다른 글
컴파일러구성 - [제8강] 순위관계에 의한 구문분석 (0) | 2016.07.12 |
---|---|
컴파일러구성 - [제7장] 구문분석 개요 (0) | 2016.07.12 |
컴파일러구성 - [제5장] 어휘분석기와 LEX (0) | 2016.07.12 |
컴파일러구성 - [제4장]정규문법,정규표현과 결정적 유한오토마타[DFA] 의 동치관계 (0) | 2016.07.10 |
컴파일러구성 - [제3장]정규언어와 유한오토마타 (0) | 2016.07.10 |
댓글