제5장 내선 설비공사 - keca.or.kr · 제5장 내선 설비공사 제5장 내선 설비공사 5-1 전선관 배관 합성수지 전선관 후강 전선관 금속가요 전선관
제5 장Context-Free 문법 -...
Transcript of 제5 장Context-Free 문법 -...
제5장 : Context-Free Grammar 2
Contents5.1 서 론
5.2 유도와 유도 트리
5.3 문법 변환
5.4 CFG 표기법
5.5 Push Down Automata; PDA
5.6 Context-free 언어와 PDA 언어
제5장 : Context-Free Grammar 3
서론
정규 문법간단한 패턴 기술에 적합
프로그래밍 언어의 구문 구조 표현에 부적합
토큰 구조
정규 표현
프로그래밍 언어 문법 구조
Context-Free Grammar; CFG
Context-Free Grammar의 장점간단하고 이해하기 용이
표현된 문법으로부터 자동적으로 인식기 구현
입력된 프로그램의 구조를 생성 규칙에 의해 분해, 번역이 유용
제5장 : Context-Free Grammar 4
Context-Free GrammarA → α 생성 규칙
A : Nonterminal, α : V*
A를 문맥에 관계없이 α로 대치
context-free(문맥-자유 또는 문맥-무관)
제5장 : Context-Free Grammar 5
표기법(Notational Convention)Terminal 심볼
알파벳 소문자(a, b, c, . . . ), 숫자( 0,1,2, ... ,9)
연산자 기호(+, - , . ..)
구분자(세미콜론, 콤마, 괄호)
' 와 ' 사이에 표기된 문법 심볼
Nonterminal 심볼알파벳 대문자
S, 시작 심볼(start symbol)
< 와 > 로 묶어서 나타낸 문법 심볼
<stmt>, <expr>
제5장 : Context-Free Grammar 6
A→α1, A→α2, ... , A→αk
생성 규칙의 왼쪽이 모두 A인 경우
A→α1|α2|...|αk, 택일(alternation) 규칙
예. E → EOE | (E) | -E | id
O → + | - | * | /
<if_statement> -> 'if' <condition> 'then' <statement>
< >안에 기술된 심볼, Nonterminal
‘ ‘사이에 기술된 심볼, Terminal
제5장 : Context-Free Grammar 7
유도 및 유도 트리
문장 생성, In Context-free Grammar문장 형태의 스트링에 생성 규칙 반복 적용
Nonterminal 확장
산술식
E → E+E | E*E | (E) | -E | id
문장을 얻기 위해 시작 심볼 E로부터 반복적으로생성 규칙 적용
E ⇒ -E ⇒ - ( E ) ⇒ - ( id )
제5장 : Context-Free Grammar 8
생성 규칙 오른쪽, Nonterminal이 존재같은 문장을 유도하는 여러 가지 방법이 가능
유도시 대치해야 할 Nonterminal을 선택 ??
여러 가지 경우가 존재
예. A ⇒ B C D
제5장 : Context-Free Grammar 9
좌측 유도 v.s 우측유도
좌측 유도(Left derivation)문장 형태의 가장 왼쪽에 있는 Nonterminal을 대치
좌문장 형태(Left-sentential form)
우측 유도(Right derivation)문장 형태의 가장 오른쪽에 있는 Nonterminal을 대치
우문장 형태(Right-sentential form)
제5장 : Context-Free Grammar 10
문장 -(id+id)가 유도되는 과정
좌측 유도
E ⇒ -E ⇒ -(E) ⇒ -(E+E) ⇒ -(id+E) ⇒ -(id+id).
우측 유도
E ⇒ -E ⇒ -(E) ⇒ -(E+E) ⇒ -(E+id) ⇒ -(id+id).
제5장 : Context-Free Grammar 11
좌파스 vs. 우파스
좌파스(left parse)좌측 유도에서 적용된 일련의 생성 규칙 순서.
top-down parsing
시작 심볼로부터 터미널 생성(확장, expansion)
우파스(right parse)우측 유도에서 적용된 생성 규칙 번호의 역순.
bottom-up parsing
터미널로부터 넌터미널로 축약하여 시작 심볼에 도착(축약, reduce)
제5장 : Context-Free Grammar 12
예, a+a*a의 좌파스와 우파스1. E → E + T 2. E → T 3. T → T * F
4. T → F 5. F → (E) 6. F → a
E ⇒ E + T E ⇒ E + T1 1
⇒ T + T ⇒ E + T * F2 3
⇒ F + T ⇒ E + T * a4 6
⇒ a + T ⇒ E + F * a6 4
⇒ a + T * F ⇒ E + a * a3 6
⇒ a + F * F ⇒ T + a * a4 2
⇒ a + a * F ⇒ F + a * a6 4
⇒ a + a * a ⇒ a + a * a6 6
좌파스 : 1 2 4 6 3 4 6 6.우파스 : 6 4 2 6 4 6 3 1.
제5장 : Context-Free Grammar 13
유도 트리(Derivation Tree)유도 트리
문장 유도 과정을 트리 형태로 표현
생성 규칙에 의해 적용되는 문장의 계층적 구조
CFG G = {VN, VT, P, S} 유도 트리노드 : 문법 심볼
루트(root) 노드 : 시작 심볼 S
Nonterminal 심볼
최소한 하나 이상의 자노드를 가지는 노드
생성 규칙 A → A1A2 ... Ak
A1A2 ... Ak 노드 : 노드 A의 자노드
제5장 : Context-Free Grammar 14
A → XYZ의 유도 트리, 순서 트리(Ordered tree)internal(nonterminal) node ∈ VN
external(terminal) node ∈ VT ∪ {ε}
예6, 교재 166
A
X Y Z
제5장 : Context-Free Grammar 15
유도 트리문장 형태에서 대치되는 심볼의 순서에 관계없이 구성
생성 규칙의 적용 순서에 따라 다른 유도 과정이 존재
두 개 이상의 유도 트리가 가능
a+a*a 에 대한 좌측 유도, 그림 5.2E ⇒ E + E E ⇒ E * E
⇒ a + E ⇒ E + E * E
⇒ a + E * E ⇒ a + E * E
⇒ a + a * E ⇒ a + a * E
⇒ a + a * a ⇒ a + a * a
제5장 : Context-Free Grammar 16
모호성(Ambiguity)모호성(Ambiguity)
문법 G에 의해 생성되는 문장이 두 개 이상의 유도 트리가 존재
모호한 문법
어떤 문장이 2개 이상의 유도 과정이 존재
예 7, 모호한 문법
S → if C then S else S
S → if C then S
S → a
C → b
제5장 : Context-Free Grammar 17
구문 분석기의 출력, 유도 트리문장의 유도 트리를 결정적으로 구성
모호하지 않은 문법(Unambiguous Grammar)
결정적 파싱(Deterministic Parsing)
모호하지 않은 문법 구성
모호한 문법을 모호하지 않은 문법으로 변환.
제5장 : Context-Free Grammar 18
모호한 문법(일반적인 경우)생성 규칙 : A → AαA
문장 형태 : AαAαA
트리 형태 :
A
A α A
A α A
A
A α A
A α A
제5장 : Context-Free Grammar 20
5.3 문법 변환
정의 5.6L(G1) = L(G2), 문법 G1과 G2는 동등
문법이 생성하는 언어가 같음.
예 9, CFG G1, G2는 동일.
G1 : A → 1B G2 : X → Y1
A → 1 X → 1
B → 0A Y → X0
∵ L(G1) = L(G2) = 1(01)*
제5장 : Context-Free Grammar 21
문법 변환다른 형태의 동등한 문법으로 변환
대입(substitution), 확장(expansion)
대입(substitution)특정 생성 규칙을 제거하고 그에 해당하는 생성 규칙추가.
if A → αBγ, B → β1 | β2 | β3 … | βn ∈ P,then
• P' = ( P - {A → αBγ } ) ∪• {A → αβ1γ | αβ2γ | ... | αβnγ }.
제5장 : Context-Free Grammar 22
확장(expansion)새로운 Nonterminal 심볼을 도입.
한개의 생성 규칙을 쪼개는 방법
생성 규칙 A→αβ에 대해
A→αX, X→β 혹은 A→Xβ, X→α
X, 새로운 Nonterminal 심볼
확장의 효과
유도 과정의 횟수를 한번 늘인 결과
제5장 : Context-Free Grammar 23
불필요한 생성 규칙 제거
불필요한 생성 규칙(Useless production rule)문장을 생성하는데 적용할 수 없는 생성 규칙
[정의 5.7] CFG G = (VN, VT, P, S)S ⇒ wXy ⇒ wxy (w, x, y∈VT
*) 형태의 유도 과정이존재하지 않으면, 심볼 X는 불필요(useless)
불필요한 생성 규칙
불필요한 심볼(useless symbol)을 갖고 있는 생성규칙
제거(elimination)
제5장 : Context-Free Grammar 24
불필요한 심볼, X시작 심볼로부터 도달할 수 없는 심볼
X가 스트링을 생성할 수 없는 Nonterminal 심볼
생성 규칙 A→αΑ ⇒ w, w ∈ VT
*, A :Terminating Nonterminal
S ⇒ uXw, u,w ∈ V* : X, 도달 가능한 심볼(accessible symbol)
필요한 생성 규칙
도달 가능한 심볼 + Terminating Nonterminal
제5장 : Context-Free Grammar 25
불필요한 생성 규칙 제거 방법terminating nonterminal을 구함
스트링을 생성할 수 없는 nonterminal을 포함하고있는 생성 규칙 제거
도달 가능한 심볼들을 구성
도달 불가능 심볼을 포함하고 있는 생성 규칙 제거
알고리즘 5.1
예제 11, 12, 13번 참조
제5장 : Context-Free Grammar 26
ε-생성 규칙 제거(ε-free)A → ε, ε-생성 규칙
생성 규칙의 형태가 A→ε, 제거.
CFG G=(VN, VT, P, S), ε-free.생성 규칙 P가 ε-생성 규칙을 갖지 않음
S는 ε-생성 규칙을 갖지만 다른 생성 규칙의 오른쪽에 S가 나타나지 않음.
ε-생성 규칙 제거구문 분석 시간 감소
ε-free 문법
제5장 : Context-Free Grammar 27
단일 생성 규칙 제거
단일 생성 규칙(single production rule) A→B
생성 규칙의 오른쪽에 한 개의 nonterminal만 존재
불필요한 유도 과정이 발생, 파싱 속도 증가
의미없는 단일 생성 규칙, 제거
제5장 : Context-Free Grammar 28
Proper 문법 : CFG G = ( VN, VT, P, S )Cycle-free
if there is no derivation of the form A ⇒+ A
ε-free
불필요한 심볼을 갖지 않음
제5장 : Context-Free Grammar 29
5.4 CFG 표기법
문법 표기법BNF(Backus-Naur Form)
확장된 BNF(EBNF, Extended-BNF)
문법 흐름도(Syntax diagram)
제5장 : Context-Free Grammar 30
BNF프로그래밍 언어의 형식적 정의
Nonterminal 심볼 : < 와 >
Terminal 심볼 : ‘ 문자 ’명칭(Identifier)에 대한 표현
<id> ::= <letter> | <id> <letter> | <id> <digit>
<letter> ::= a|b|c|...|y|z
<digit> ::= 0|1|2|...|8|9
::= : →
| : 택일(alternation)
교재 PP. 184, 예 17
제5장 : Context-Free Grammar 31
EBNF반복, 선택적인 부분을 간결하게 표현
특수한 의미를 갖는 메타 심볼(meta symbol) 도입
메타 심볼(Meta Symbol)
언어의 일부분이 아니라 언어를 표현하려고 사용된특수 심볼.
제5장 : Context-Free Grammar 32
반복 부분(repetitive part) 표현{ }
{a}
a가 영번 이상 반복
정규 표현 a*와 같은 의미
콤마로 구분되는 명칭 리스트 : BNF 및 EBNFBNF
<id_list> ::= <id_list> , <id> | <id>
EBNF
<id_list> ::= <id> { , <id> }
제5장 : Context-Free Grammar 33
혼합문에 대한 BNF 및 EBNF 표현BNF 표현
<compound_statement> ::=
begin <statement_list> end
<statement_list> ::=
<statement_list> ; <statement> | <statement>
EBNF 표현<compound_statement> ::=
begin <statement> { ; <statement> } end
제5장 : Context-Free Grammar 34
반복되는 최대 회수와 최소 회수 지정
<external_name> ::= <alphabet> {<alphanumeric>}7
<alphanumeric> ::= <alphabet> | <digit>
<alphabet> ::= a|b|c|…|y|z
<digit> ::= 0|1|2|…|9
중괄호 뒤의 0은 최소 회수, 7은 최대 회수
0
제5장 : Context-Free Grammar 35
선택적인 부분(optional part)[ ]
[x]
x가 나타나지 않거나 한번만 나타날 수 있음
[x]는 {x}1
예
<if_st> ::= if <cond> then <stat> [else <stat>]
제5장 : Context-Free Grammar 36
단순 변수, 일차원 배열 변수 BNF 및 EBNF 표현
BNF 표현 :
<variable> ::= <id> | <id> '[' <exp> ']'
EBNF 표현 :
<variable> ::= <id> [ '[' <exp> ']‘ ]
제5장 : Context-Free Grammar 37
괄호와 택일 기호 : ( | )여러개의 생성 규칙을 간단히 표현
<exp> ::= <exp> + <exp> | <exp> - <exp> |
<exp> * <exp> | <exp> / <exp>
<exp> ::= <exp> ( + | - | * | / ) <exp>
제5장 : Context-Free Grammar 38
EBNF 메타 심볼 vs. terminal 심볼terminal 심볼을 '와 '로 묶어 표현
<BNF_rule> ::= <left_part> '::=' <right_part>
<right_part> ::= <right_part_element> { '|’<right_part_element> }
제5장 : Context-Free Grammar 39
문법 흐름도(Syntax diagram)문법을 도식화하여 표현
초보자가 프로그래밍 언어의 문법을 쉽게 이해
구성
사각형 :Nonterminal
타원 : Terminal
지시선 : 문법이 움직이는 경로(path)
제5장 : Context-Free Grammar 40
Nonterminal A사각형 안을 A
terminal의 경우와 같이 지시선
사각형의 내용은 그 안의 이름에 의해 참조
A
Terminal a타원안을 a
지시선으로 연결
a
제5장 : Context-Free Grammar 41
생성 규칙 A ::= X1 X2... Xn
Xi가 Nonterminal인 경우
Xi가 terminal인 경우
X1 X3 Xn...X2
...x1 x2 xnx3
제5장 : Context-Free Grammar 45
푸시다운 오토마타
푸시다운 오토마타(Push-Down Automata; PDA)보조 기억장치를 가진 인식기.
Context-Free Grammar 인식기.
구성유한 상태 제어(finite state control)
전체의 행동 제어
현재의 입력 심볼, 스택의 top 심볼에 따라 행동
입력 테이프(input tape)
입력 스트링 유지
스택(stack)
보조 기억장치, 푸시다운 리스트(push-down list)
제5장 : Context-Free Grammar 46
Push Down Automata, PDA
a1 a2 . . . an
Finite statecontrol
Input tape
Z1
stack
Z2
Zn
제5장 : Context-Free Grammar 47
PDA P = (Q, Σ, Γ, δ, q0 , Z0, F)
Q : 상태의 유한 집합
Σ : 입력 알파벳의 유한 집합
Γ : 스택 심볼의 유한집합
δ : 사상 함수 Q × (Σ∪{ε} ) × Γ → Q × Γ*
q0 ∈ Q : 시작 상태(start state)
Z0 ∈ Γ : 스택의 시작 심볼
F ⊆ Q : 종결 상태(final state)의 집합
제5장 : Context-Free Grammar 48
사상 함수(전이 함수) : δ, delta
δ(q, a, Z) = { (p1,α1), (p2,α2), . . . ,(pn,αn) }
현재의 상태 : q
입력 심볼 : a
스택 Top 심볼 : Z
(pi,αi) 선택
현재의 q 상태에서 입력 a를 본 다음 상태 : pi
스택 top 심볼 Z를 αi로 대치.
제5장 : Context-Free Grammar 49
PDA 형태(configuration) : P어떤 시점에서 PDA P의 현재 상태 표현 방법
Q × Σ* × Γ* => Triple(q, ω, α)
q : 현재 상태
ω : 읽지 않은 입력 부분
α : 스택의 내용
ω = ε인 경우, 모든 입력 심볼이 읽혀졌음
P 에 의한 상태 이동(move) : |--
(q, aω, Zα) |-- (q', ω,Υα)
제5장 : Context-Free Grammar 50
a=ε; ε-이동(ε-move)현재의 입력 심볼 변화 없음
모든 입력 심볼이 읽혀졌을 때 발생
스택이 빈경우, 어떤 이동도 발생하지 않음.
* : 영번 이상, + : 한번 이상 이동
P 시작 형태Σ*에 속하는 ω, (q0,ω,Z0)
P의 종결 형태(q, ε, α), q∈F, α∈Γ*
제5장 : Context-Free Grammar 51
P의 이동(move)ː┣1) a ≠ ε : (q, aω, Zα) ┣ ( q', ω, γα)
2) a = ε : (q, ε, Z) ┣ (q', ε, γ) <===> ε-move
┣ * : zero or more moves
┣ + : one or more moves
제5장 : Context-Free Grammar 52
L(P) : PDA P에 의해 언어 인식(accept).입력 스트링 ω를 다본 상태가 종결 상태
시작 상태 : (q0, ω, Z0)
종결 상태 : (q, ε, α), where q ∈ F, α ∈ F*
L(P) = {ω|(q0, ω, Z0) ┣ * (q, ε, α), q ∈ F, α ∈ Γ* }.
제5장 : Context-Free Grammar 53
인식(accept)
시작 상태에서 입력 스트링 ω를 다본 상태가 종결 상태에 도달
"ω는 P에 의해 인식(accept)"
P에 의해 정의되는 언어
푸시다운 오토마타 언어 : L(P)
P에 의해 인식되는 스트링의 집합
L(P) = {ω|( q0,ω, Z0) |-- (q, ε, α), q∈F, α∈Γ*}
제5장 : Context-Free Grammar 54
예 26.언어 L = {0n1n|n≥1}을 인식하는 PDA
P = ( {q0, q1, q2}, {0, 1}, {Z, 0}, δ , q0, Z, {q0} )
δ(q0, 0, Z) = { (q1, 0Z) }
δ(q1, 0, 0) = { (q1, 00) }
δ(q1, 1, 0) = { (q2, ε) }
δ(q2, 1, 0) = { (q2, ε) }
δ(q2, ε, Z) = { (q0, ε) }
0에 대하여 차례로 스택에 모두 이동
1에 대하여 스택에 있는 0을 하나씩 팝(pop)