Upload
others
View
11
Download
0
Embed Size (px)
Citation preview
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 1
Regular Expression and Context-free Grammar
상지대학교 컴퓨터정보공학부
고 광 만
Lecture04_RE_CFG 2
정규 문법과 정규 언어n 정규 문법(Regular Grammar)
n 촘스키(Chomsky, N.) 문법 규칙-Type 3
n 토큰 구조 표현(어휘 분석 단계)
n 정규 문법의 형태① 우선형 문법(right-linear grammar; RLG)
nNonterminal이 Terminal 뒤에 나타남
nRLG: A -> tB, A -> t
② 좌선형 문법(left-linear grammar; LLG)
nNonterminal이 Terminal 앞에 나타남
nLLG: A -> Bt, A -> t (A,B ∈ VN 이고 t ∈ VT*)
Lecture04_RE_CFG 3
n 정규 문법이 사용되는 이유n 토큰의 구조는 간단하므로 정규 문법으로 표현 가능
n Context-Free Grammar보다는 정규 문법으로부터 인식기의 구현이 쉬움.
n 모듈러하게 구성할 수 있음
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 2
Lecture04_RE_CFG 4
정규 표현(Regular Expression)n 정 의
n 정규 문법 G를 대수학적인 성질로 표현
n 정규 언어에 속해있는 스트링의 모양을 직접 기술
n 정규 문법은 문법이 나타내는 언어의 형태를 체계적으로 구하여 정규 표현으로 나타낼 수 있음.
정규 문법(Regular Grammar)
정규 표현(Regular Grammar)
유한 오토마타(Finite Automata)
Lecture04_RE_CFG 5
n 정규 표현의 예n 정규 표현 : ab*
na가 나오고 b가 0번 이상 나오는 스트링
n {abn| n≥0}
n 정규 표현 : (0+1)*
n {0,1}*
n 정규 표현 : (a+b)*abb
na와 b로 이루어지는 모든 스트링 뒤에 abb가 나오는 언어
Lecture04_RE_CFG 6
n 명칭(identifier)의 정규 표현
n 특정한 형태의 스트링을 표현하는데 유용
n letter={A,B, ..., Z,a,b, ...,z}, digit={0,1,2, ..., 9}
n letter(letter+digit)*
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 3
Lecture04_RE_CFG 7
n G = ({S, R}, {a,b}, P, S)
n S → aS | bR | ε
n R → aS
n정규 표현식
S = aS + bR +ε .... (1)
R = aS .... (2)
n X = αX +β 형태의 식이 존재하지 않음
Lecture04_RE_CFG 8
n 시작 심볼 S에 대해, 식 (2)를 식 (1)에 대입.
S = aS + b(aS) +ε
= aS + baS +ε
= (a+ba)S +ε
n 변환 과정에 의해 L(G) 구성
n S = (a+ba)S +ε = (a+ba)*
n L(G) = (a+ba)*
Lecture04_RE_CFG 9
G = ( {S,A,B}, {a,b}, P, S )에 대한 L(G) ?n 정규 문법
S → aA | bB | b
A → bA |ε
B → bS
n 정규 표현식
S = aA + bB + b .... (1)
A = bA +ε .... (2)
B = bS .... (3)
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 4
Lecture04_RE_CFG 10
n X = αX +β형태의 식 (2)를 풀면
A = bA +ε = b*ε = b* .... (4)
n 식 (4)와 (3)을 식 (1)에 대입
S = aA + bB + b
= ab* + bbS +b
= bbS + (ab* + b)
= (bb)*(ab* + b)
L(G) = (bb)* (ab* + b)
Lecture04_RE_CFG 11
정규 표현 ?n 정규 표현식
X1 = 0X2 + 1X1 +ε .... (1)
X2 = 0X3 + 1X2 .... (2)
X3 = 0X1 + 1X3 .... (3)
n 식 (3)에서
X3 = 1X3 + 0X1
= 1*0X1 .... (4)
Lecture04_RE_CFG 12
n 식 (2)에 식(4)를 대입X2 = 01*0X1 + 1X2 = 1X2 + 01*0X1
= 1*01*0X1 .... (5)
n 식 (5)를 식 (1)에 대입X1 = 01*01*0X1 + 1X1 +ε
= (01*01*0 + 1)X1 +ε
= (01*01*0 + 1)*
n L(X1) = (01*01*0 + 1)*
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 5
Lecture04_RE_CFG 13
유한 오토마타(Finite Automata; FA)n 언어 인식기(Language Recognizer)
n 스트링을 받아 스트링이 그 언어의 문장, "Yes"
n 인식기 중에 가장 간단한 형태
n 어휘 분석기의 고안/구현
a0 a1 a2 ... ai ai+1 ai+2 ... aninput
Input head
Auxiliary Storage
Finite State Control
Lecture04_RE_CFG 14
FA M = (Q, Σ, δ ,q0, F)n 구성 요소
n Q : 상태(state)들의 유한 집합
n Σ : 입력 심볼의 유한 집합
n δ : 사상 함수(mapping function)
nQ×Σ→2Q(power set of Q)
nδ(q, a) = {p1 ,p2 , . . . ,pn}
nq 상태에서 입력 a를 본 다음 상태는 p1부터 pn중
하나 선택
n q0 : 시작 상태(start 또는 initial state) (q0∈Q)
n F : 종결 상태의 집합 (F⊆Q)
Lecture04_RE_CFG 15
n 상태 전이 함수(state transition function)
n 결정적 유한 오토마타(Derteministic FA; DFA)
n 비결정적 유한 오토마타(Nonderteministic FA; NFA)
n DFA 정의
n 전이 함수 δ(q, a)가 다음 상태로서 오직 한 상태만 갖
는 경우
n δ(q, a) = {p}, δ(q, a) = p
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 6
Lecture04_RE_CFG 16
DFA M = (Q, Σ ,δ, q0, F)n 구성 요소
n Q : 상태(state)들의 유한 집합
n Σ : 입력 심볼의 유한 집합
n δ : 사상 함수(mapping function)
nQ×Σ → Q
nδ(q, a) = p
nq 상태에서 입력 a를 본 다음 상태는 p.
n q0 : 시작 상태(start 또는 initial state) (q0∈Q)
n F : 종결 상태의 집합 (F⊆Q)
Lecture04_RE_CFG 17
n M = ( {q0, q1, q2}, {a, b} , δ, q0, {q2} )
δ(q0, a) = q1 δ(q0, b) = q2
δ(q1, a) = q2 δ(q1, b) = q0
δ(q2, a) = q0 δ(q2, b) = q1
n 상태수, 3개 : q0, q1, q2
n 입력 심볼 : a, b
n 시작 상태 : q0
n 종결 상태 : q2
Lecture04_RE_CFG 18
n 상태 전이표(transition table)
n FA의 전이 함수를 행렬(matrix) 형태로 표현
n 행과 열은 각각 상태 집합과 입력 심볼 표시
n 행과 열이 교차하는 위치 : 다음 상태
n 전이 함수에 대한 상태 전이표
δ a b
q0 q1 q2
q1 q2 q0
q2 q0 q1
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 7
Lecture04_RE_CFG 19
n 전이 함수 확장
n Q×Σ→Q ⇒ Q×Σ*→Q
n 한 개의 심볼을 스트링으로 확장
nδ(q, ε) = q
nδ(q, xa) = δ( δ(q,x) , a)
n 상태 q0에서 스트링 aba를 인식
n δ(q0, aba) = δ(δ(q0, ab), a)
= δ(δ(δ(q0, a), b), a)
Lecture04_RE_CFG 20
n δ(q0, x) = p인 경우
n q0로부터 x를 본 다음 상태, p
n p가 종결 상태에 포함(p∈F)
n스트링 x는 M에 의해 인식(accept).
n 시작 상태에서 주어진 스트링을 다본 상태가 종결 상
태이면 스트링 인식
Lecture04_RE_CFG 21
n M에 의해 인식되는 언어, L(M)
n DFA M에 의해 인식되는 스트링 전체를 모아 놓은 집
합
n L(M) 정의
n L(M) = {x| δ(q0, x) ∈ F}.
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 8
Lecture04_RE_CFG 22
n M = ( {p, q, r}, {0, 1}, δ, p, {r} )에 의한 스트
링 1001, 0110 인식 ?
n 오토마타 상태 전이표
δ 0 1
p q p
q r p
r r r
Lecture04_RE_CFG 23
n δ(p,1001)
=δ(p, 001) = δ(q, 01) =δ(r, 1) = r ∈ F
스트링 1001은 M에 의해 인식
n δ(p,0110)
=δ(p, 110) = δ(p, 10) = δ(p, 0) = q ∈ F
스트링 0110은 M에 의해 인식되지 못함
Lecture04_RE_CFG 24
상태 전이도(state transition diagram)n 상태 전이도
n 각 상태를 노드(node)로 표현
n 전이 함수 δ(q,a) = p
n상태 q에서 p로 이동, 레이블이 a인 지시선 사용
n 종결 상태 : 이중 원, 시작 상태 : start 지시선
n 상태 전이도 표현
n 스트링을 인식 과정을 표현한 흐름도
n 스트링을 받아 들이는 인식기를 고안하는데 사용
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 9
Lecture04_RE_CFG 25
n 예 14(PP.80)에 대한 상태 전이도
n 예 16, 명칭에 대한 상태 전이도
start p q r0
1
1
0
0,1
start Sletter
letter, digit
A
Context-Free Grammar
Lecture04_RE_CFG 27
n 정규 문법n 간단한 패턴 기술에 적합
n 프로그래밍 언어의 구문 구조 표현에 부적합
n 토큰 구조
n정규 표현
n 프로그래밍 언어 문법 구조
nContext-Free Grammar; CFG
n Context-Free Grammar의 장점n 간단하고 이해하기 용이
n 표현된 문법으로부터 자동적으로 인식기 구현
n 입력된 프로그램의 구조를 생성 규칙에 의해 분해, 번역이 유용
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 10
Lecture04_RE_CFG 28
n Context-Free Grammarn A → α 생성 규칙
n A : Nonterminal, α : V*
n A를 문맥에 관계없이 α로 대치
n context-free(문맥-자유 또는 문맥-무관)
Lecture04_RE_CFG 29
표기법(Notational Convention)n Terminal 심볼
n 알파벳 소문자(a, b, c, . . . ), 숫자( 0,1,2, ... ,9)
n 연산자 기호(+, - , . ..)
n 구분자(세미콜론, 콤마, 괄호)
n ' 와 ' 사이에 표기된 문법 심볼
n Nonterminal 심볼n 알파벳 대문자
n S, 시작 심볼(start symbol)
n < 와 > 로 묶어서 나타낸 문법 심볼
n <stmt>, <expr>
Lecture04_RE_CFG 30
n A→α1, A→α2, ... , A→αk
n 생성 규칙의 왼쪽이 모두 A인 경우
n A→α1|α2|...|αk, 택일(alternation) 규칙
n 예.
n E → EOE | (E) | -E | id
n O → + | - | * | /
<if_statement> -> 'if' <condition> 'then' <statement>
n< >안에 기술된 심볼, Nonterminal
n ‘ ‘사이에 기술된 심볼, Terminal
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 11
Lecture04_RE_CFG 31
유도 및 유도 트리
n 문장 생성, In Context-free Grammarn 문장 형태의 스트링에 생성 규칙 반복 적용
n Nonterminal 확장
n 산술식
E → E+E | E*E | (E) | -E | id
n문장을 얻기 위해 시작 심볼 E로부터 반복적으로생성 규칙 적용
E ⇒ -E ⇒ - ( E ) ⇒ - ( id )
Lecture04_RE_CFG 32
n 생성 규칙 오른쪽, Nonterminal이 존재n 같은 문장을 유도하는 여러 가지 방법이 가능
n 유도시 대치해야 할 Nonterminal을 선택 ??
n여러 가지 경우가 존재
n 예. A ⇒ B C D
Lecture04_RE_CFG 33
좌측 유도 v.s 우측유도
n 좌측 유도(Left derivation)n 문장 형태의 가장 왼쪽에 있는 Nonterminal을 대치
n 좌문장 형태(Left-sentential form)
n 우측 유도(Right derivation)n 문장 형태의 가장 오른쪽에 있는 Nonterminal을 대치
n 우문장 형태(Right-sentential form)
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 12
Lecture04_RE_CFG 34
n문장 -(id+id)가 유도되는 과정
n 좌측 유도
E ⇒ -E ⇒ -(E) ⇒ -(E+E) ⇒ -(id+E) ⇒ -(id+id).
n 우측 유도
E ⇒ -E ⇒ -(E) ⇒ -(E+E) ⇒ -(E+id) ⇒ -(id+id).
Lecture04_RE_CFG 35
좌파스 vs. 우파스
n 좌파스(left parse)n 좌측 유도에서 적용된 일련의 생성 규칙 순서.
n top-down parsing
n시작 심볼로부터터미널 생성(확장, expansion)
n 우파스(right parse)
n우측 유도에서적용된 생성 규칙 번호의 역순.
n bottom-up parsing
n터미널로부터넌터미널로 축약하여 시작심볼에도착(축약, reduce)
Lecture04_RE_CFG 36
n 예, 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
r좌파스 : 1 2 4 6 3 4 6 6.r우파스 : 6 4 2 6 4 6 3 1.
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 13
Lecture04_RE_CFG 37
n 구문 분석기의 출력, 유도 트리n 문장의 유도 트리를 결정적으로 구성
n 모호하지 않은 문법(Unambiguous Grammar)
n 결정적 파싱(Deterministic Parsing)
n모호하지 않은 문법 구성
n모호한 문법을 모호하지 않은 문법으로 변환.
Lecture04_RE_CFG 38
CFG 표기법
n 문법 표기법n BNF(Backus-Naur Form)
n 확장된 BNF(EBNF, Extended-BNF)
n 문법 흐름도(Syntax diagram)
Lecture04_RE_CFG 39
n BNFn 프로그래밍 언어의 형식적 정의
n Nonterminal 심볼 : < 와 >
n Terminal 심볼 : ‘ 문자 ’
n 명칭(Identifier)에 대한 표현
<id> ::= <letter> | <id> <letter> | <id> <digit>
<letter> ::= a|b|c|...|y|z
<digit> ::= 0|1|2|...|8|9
n ::= : →
n | : 택일(alternation)
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 14
Lecture04_RE_CFG 40
n EBNFn 반복, 선택적인 부분을 간결하게 표현
n 특수한 의미를 갖는 메타 심볼(meta symbol) 도입
n 메타 심볼(Meta Symbol)
n언어의 일부분이 아니라 언어를 표현하려고 사용된특수 심볼.
Lecture04_RE_CFG 41
n 반복 부분(repetitive part) 표현n { }
n {a}
n a가 영번 이상 반복
n 정규 표현 a*와 같은 의미
n 콤마로 구분되는 명칭 리스트 : BNF 및 EBNFn BNF
<id_list> ::= <id_list> , <id> | <id>
n EBNF
<id_list> ::= <id> { , <id> }
Lecture04_RE_CFG 42
n혼합문에 대한 BNF 및 EBNF 표현n BNF 표현<compound_statement> ::=
begin <statement_list> end
<statement_list> ::=
<statement_list> ; <statement> | <statement>
n EBNF 표현<compound_statement> ::=
begin <statement> { ; <statement> } end
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 15
Lecture04_RE_CFG 43
n 반복되는 최대 회수와 최소 회수 지정
<external_name> ::= <alphabet> {<alphanumeric>}7
<alphanumeric> ::= <alphabet> | <digit>
<alphabet> ::= a|b|c|…|y|z
<digit> ::= 0|1|2|…|9
n중괄호 뒤의 0은 최소 회수, 7은 최대 회수
0
Lecture04_RE_CFG 44
n 선택적인 부분(optional part)n [ ]
n [x]
n x가 나타나지 않거나 한번만 나타날 수 있음
n [x]는 {x}1
n 예
<if_st> ::= if <cond> then <stat> [else <stat>]
Lecture04_RE_CFG 45
n 단순 변수, 일차원 배열 변수 BNF 및 EBNF 표현
n BNF 표현 :
<variable> ::= <id> | <id> '[' <exp> ']'
n EBNF 표현 :
<variable> ::= <id> [ '[' <exp> ']‘ ]
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 16
Lecture04_RE_CFG 46
n 괄호와 택일 기호 : ( | )n 여러개의 생성 규칙을 간단히 표현
<exp> ::= <exp> + <exp> | <exp> - <exp> |
<exp> * <exp> | <exp> / <exp>
<exp> ::= <exp> ( + | - | * | / ) <exp>
Lecture04_RE_CFG 47
n EBNF 메타 심볼 vs. terminal 심볼n terminal 심볼을 '와 '로 묶어 표현
<BNF_rule> ::= <left_part> '::=' <right_part>
<right_part> ::= <right_part_element> { '|’<right_part_element> }
Lecture04_RE_CFG 48
n 문법 흐름도(Syntax diagram)n 문법을 도식화하여 표현
n초보자가 프로그래밍 언어의 문법을 쉽게 이해
n 구성
n사각형 :Nonterminal
n타원 : Terminal
n지시선 : 문법이 움직이는 경로(path)
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 17
Lecture04_RE_CFG 49
n Nonterminal An 사각형 안을 A
n terminal의 경우와 같이 지시선
n 사각형의 내용은 그 안의 이름에 의해 참조
A
n Terminal an 타원안을 a
n 지시선으로 연결
a
Lecture04_RE_CFG 50
n 생성 규칙 A ::= X1 X2... Xn
n Xi가 Nonterminal인 경우
n Xi가 terminal인 경우
X1 X3 Xn...X2
...x1 x2 xnx3
Lecture04_RE_CFG 51
n A ::= α1|α2| . . . |αn
α1
αi
αn
A
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 18
Lecture04_RE_CFG 52
r EBNF A ::= {α}
r EBNF A ::= [ α ]
α
A
α
A
Lecture04_RE_CFG 53
n EBNF A ::= ( α1 | α2 ) β
α2
A
α1
β
Lecture04_RE_CFG 54
푸시다운 오토마타
n 푸시다운 오토마타(Push-Down Automata; PDA)n 보조 기억장치를 가진 인식기.
n Context-Free Grammar 인식기.
n 구성n 유한 상태 제어(finite state control)
n전체의 행동 제어
n현재의 입력 심볼, 스택의 top 심볼에 따라 행동
n 입력 테이프(input tape)
n입력 스트링 유지
n 스택(stack)
n보조 기억장치, 푸시다운 리스트(push-down list)
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 19
Lecture04_RE_CFG 55
n Push Down Automata, PDA
a1 a2 . . . an
Finite statecontrol
Input tape
Z1
stack
Z2
Zn
Lecture04_RE_CFG 56
n PDA P = (Q, Σ, Γ, δ, q0 , Z0, F)
n Q : 상태의 유한 집합
n Σ : 입력 알파벳의 유한 집합
n Γ : 스택 심볼의 유한집합
n δ : 사상 함수 Q × (Σ∪{ε} ) × Γ → Q × Γ*
n q0 ∈ Q : 시작 상태(start state)
n Z0 ∈ Γ : 스택의 시작 심볼
n F ⊆ Q : 종결 상태(final state)의 집합
Lecture04_RE_CFG 57
n 사상 함수(전이 함수) : δ, delta
δ(q, a, Z) = { (p1,α1), (p2,α2), . . . ,(pn,αn) }
n 현재의 상태 : q
n 입력 심볼 : a
n 스택 Top 심볼 : Z
n (pi,αi) 선택
n현재의 q 상태에서 입력 a를 본 다음 상태 : pi
n스택 top 심볼 Z를 αi로 대치.
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 20
Lecture04_RE_CFG 58
n PDA 형태(configuration) : Pn 어떤 시점에서 PDA P의 현재 상태 표현 방법
n Q × Σ* × Γ* => Triple(q, ω, α)
nq : 현재 상태
nω : 읽지 않은 입력 부분
nα : 스택의 내용
n ω = ε인 경우, 모든 입력 심볼이 읽혀졌음
n P 에 의한 상태 이동(move) : |--
(q, aω, Zα) |-- (q', ω,Υα)
Lecture04_RE_CFG 59
n 인식(accept)
n 시작 상태에서 입력 스트링 ω를 다본 상태가 종결 상태에 도달
n "ω는 P에 의해 인식(accept)"
n P에 의해 정의되는 언어
n푸시다운 오토마타 언어 : L(P)
nP에 의해 인식되는 스트링의 집합
n L(P) = {ω|( q0,ω, Z0) |-- (q, ε, α), q∈F, α∈Γ*}
Lecture04_RE_CFG 60
n 언어 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, ε) }
n 0에 대하여 차례로 스택에 모두 이동
n 1에 대하여 스택에 있는 0을 하나씩 팝(pop)
Regular Expression and Context-free Grammar
Programming Language Theory 2015, [email protected] 21
Lecture04_RE_CFG 61
n 입력 스트링 0011에 대하여 P가 인식하는 과정
(q0, 0011, Z) |-- (q1, 011, 0Z)
|-- (q1, 11, 00Z)
|-- (q2, 1, 0Z)
|-- (q2, ε, Z)
|-- (q0, ε, ε)