61
Grammar and Recognizer SANGJI University Kwangman Ko ([email protected])

Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

Grammar and Recognizer

SANGJI University

Kwangman Ko

([email protected])

Page 2: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

정규 문법과 정규 언어

정규 문법(Regular Grammar)

~ 촘스키(Chomsky, N.) 문법 규칙-Type 3

~ 토큰 구조 표현(어휘 분석 단계)

정규 문법의 형태

① 우선형 문법(right-linear grammar; RLG)

Nonterminal이 Terminal 뒤에 나타남

RLG: A -> tB, A -> t

② 좌선형 문법(left-linear grammar; LLG)

Nonterminal이 Terminal 앞에 나타남

LLG: A -> Bt, A -> t (A,B ∈ VN 이고 t ∈ VT*)

Page 3: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

정규 문법이 사용되는 이유

~ 토큰의 구조는 간단하므로 정규 문법으로 표현 가능

~ Context-Free Grammar보다는 정규 문법으로부터 인식기의 구현이 쉬움.

~ 모듈러하게 구성할 수 있음

Page 4: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

정규 표현(Regular Expression)정 의

~ 정규 문법 G를 대수학적인 성질로 표현

~ 정규 언어에 속해있는 스트링의 모양을 직접 기술

~ 정규 문법은 문법이 나타내는 언어의 형태를 체계적으로

구하여 정규 표현으로 나타낼 수 있음.

정규 문법(Regular Grammar)

정규 표현(Regular Grammar)

유한 오토마타(Finite Automata)

Page 5: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

정규 표현의 예

~ 정규 표현 : ab*

a가 나오고 b가 0번 이상 나오는 스트링

{abn| n≥0}

~ 정규 표현 : (0+1)*

{0,1}*

~ 정규 표현 : (a+b)*abb

a와 b로 이루어지는 모든 스트링 뒤에 abb가 나오는 언어

Page 6: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

명칭(identifier)의 정규 표현

~ 특정한 형태의 스트링을 표현하는데 유용

~ letter={A,B, ..., Z,a,b, ...,z}, digit={0,1,2, ..., 9}

~ letter(letter+digit)*

Page 7: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

G = ({S, R}, {a,b}, P, S)

~ S → aS | bR | ε

~ R → aS

정규 표현식

S = aS + bR +ε .... (1)

R = aS .... (2)

~ X = αX +β 형태의 식이 존재하지 않음

Page 8: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

시작 심볼 S에 대해, 식 (2)를 식 (1)에 대입.

S = aS + b(aS) +ε

= aS + baS +ε

= (a+ba)S +ε

변환 과정에 의해 L(G) 구성

~ S = (a+ba)S +ε = (a+ba)*

~ L(G) = (a+ba)*

Page 9: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

G = ( {S,A,B}, {a,b}, P, S )에 대한 L(G) ?

정규 문법

S → aA | bB | b

A → bA |ε

B → bS

정규 표현식

S = aA + bB + b .... (1)

A = bA +ε .... (2)

B = bS .... (3)

Page 10: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

X = αX +β형태의 식 (2)를 풀면

A = bA +ε = b*ε = b* .... (4)

식 (4)와 (3)을 식 (1)에 대입

S = aA + bB + b

= ab* + bbS +b

= bbS + (ab* + b)

= (bb)*(ab* + b)

L(G) = (bb)* (ab* + b)

Page 11: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

정규 표현 ?

정규 표현식

X1 = 0X2 + 1X1 +ε .... (1)

X2 = 0X3 + 1X2 .... (2)

X3 = 0X1 + 1X3 .... (3)

식 (3)에서

X3 = 1X3 + 0X1

= 1*0X1 .... (4)

Page 12: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

식 (2)에 식(4)를 대입

X2 = 01*0X1 + 1X2 = 1X2 + 01*0X1

= 1*01*0X1 .... (5)

식 (5)를 식 (1)에 대입

X1 = 01*01*0X1 + 1X1 +ε

= (01*01*0 + 1)X1 +ε

= (01*01*0 + 1)*

L(X1) = (01*01*0 + 1)*

Page 13: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

유한 오토마타(Finite Automata; FA)

언어 인식기(Language Recognizer)

~ 스트링을 받아 스트링이 그 언어의 문장, "Yes"

~ 인식기 중에 가장 간단한 형태

~ 어휘 분석기의 고안/구현

a0 a1 a2 ... ai ai+1 ai+2 ... aninput

Input head

Auxiliary Storage

Finite State Control

Page 14: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

FA M = (Q, Σ, δ ,q0, F)

구성 요소

~ Q : 상태(state)들의 유한 집합

~ Σ : 입력 심볼의 유한 집합

~ δ : 사상 함수(mapping function)

Q×Σ→2Q(power set of Q)

δ(q, a) = {p1 ,p2 , . . . ,pn}

q 상태에서 입력 a를 본 다음 상태는 p1부터 pn중 하나

선택

~ q0 : 시작 상태(start 또는 initial state) (q0∈Q)

~ F: 종결 상태의 집합 (F⊆Q)

Page 15: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

상태 전이 함수(state transition function)

~ 결정적 유한 오토마타(Derteministic FA; DFA)

~ 비결정적 유한 오토마타(Nonderteministic FA; NFA)

DFA 정의

~ 전이 함수 δ(q, a)가 다음 상태로서 오직 한 상태만 갖는 경

~ δ(q, a) = {p}, δ(q, a) = p

Page 16: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

DFA M = (Q, Σ ,δ, q0, F)

구성 요소

~ Q : 상태(state)들의 유한 집합

~ Σ : 입력 심볼의 유한 집합

~ δ : 사상 함수(mapping function)

Q×Σ → Q

δ(q, a) = p

q 상태에서 입력 a를 본 다음 상태는 p.

~ q0 : 시작 상태(start 또는 initial state) (q0∈Q)

~ F: 종결 상태의 집합 (F⊆Q)

Page 17: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

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

~ 상태수, 3개 : q0, q1, q2

~ 입력 심볼 : a, b

~ 시작 상태 : q0

~ 종결 상태 : q2

Page 18: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

상태 전이표(transition table)

~ FA의 전이 함수를 행렬(matrix) 형태로 표현

~ 행과 열은 각각 상태 집합과 입력 심볼 표시

~ 행과 열이 교차하는 위치 : 다음 상태

전이 함수에 대한 상태 전이표

δ a b

q0 q1 q2

q1 q2 q0

q2 q0 q1

Page 19: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

전이 함수 확장

~ Q×Σ→Q ⇒ Q×Σ*→Q

~ 한 개의 심볼을 스트링으로 확장

δ(q, ε) = q

δ(q, xa) = δ( δ(q,x) , a)

상태 q0에서 스트링 aba를 인식

~ δ(q0, aba) = δ(δ(q0, ab), a)

= δ(δ(δ(q0, a), b), a)

Page 20: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

δ(q0, x) = p인 경우

~ q0로부터 x를 본 다음 상태, p

~ p가 종결 상태에 포함(p∈F)

스트링 x는 M에 의해 인식(accept).

~ 시작 상태에서 주어진 스트링을 다본 상태가 종결 상태이면

스트링 인식

Page 21: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

M에 의해 인식되는 언어, L(M)

~ DFA M에 의해 인식되는 스트링 전체를 모아 놓은 집합

~ L(M) 정의

L(M) = {x| δ(q0, x) ∈ F}.

Page 22: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

M = ( {p, q, r}, {0, 1}, δ, p, {r} )에 의한 스트링

1001, 0110 인식 ?

~ 오토마타 상태 전이표

δ 0 1

p q p

q r p

r r r

Page 23: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

δ(p,1001)

=δ(p, 001) = δ(q, 01) =δ(r, 1) = r ∈ F

스트링 1001은 M에 의해 인식

δ(p,0110)

=δ(p, 110) = δ(p, 10) = δ(p, 0) = q ∈ F

스트링 0110은 M에 의해 인식되지 못함

Page 24: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

상태 전이도(state transition diagram)

상태 전이도

~ 각 상태를 노드(node)로 표현

~ 전이 함수 δ(q,a) = p

상태 q에서 p로 이동, 레이블이 a인 지시선 사용

~ 종결 상태 : 이중 원, 시작 상태 : start 지시선

상태 전이도 표현

~ 스트링을 인식 과정을 표현한 흐름도

~ 스트링을 받아 들이는 인식기를 고안하는데 사용

Page 25: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

상태 전이도

명칭에 대한 상태 전이도

start p q r01

10

0,1

start Sletter

letter, digit

A

Page 26: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

Context-Free Grammar

Page 27: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

정규 문법~ 간단한 패턴 기술에 적합

~ 프로그래밍 언어의 구문 구조 표현에 부적합

~ 토큰 구조

정규 표현

~ 프로그래밍 언어 문법 구조

Context-Free Grammar; CFG

Context-Free Grammar의 장점~ 간단하고 이해하기 용이

~ 표현된 문법으로부터 자동적으로 인식기 구현

~ 입력된 프로그램의 구조를 생성 규칙에 의해 분해, 번역이유용

Page 28: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

Context-Free Grammar

~ A → α 생성 규칙

A : Nonterminal, α : V*

A를 문맥에 관계없이 α로 대치

context-free(문맥-자유 또는 문맥-무관)

Page 29: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

표기법(Notational Convention)

Terminal 심볼

~ 알파벳 소문자(a, b, c, . . . ), 숫자( 0,1,2, ... ,9)

~ 연산자 기호(+, - , . ..)

~ 구분자(세미콜론, 콤마, 괄호)

~ ' 와 ' 사이에 표기된 문법 심볼

Nonterminal 심볼

~ 알파벳 대문자

~ S, 시작 심볼(start symbol)

~ < 와 > 로 묶어서 나타낸 문법 심볼

<stmt>, <expr>

Page 30: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

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

Page 31: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

유도 및 유도 트리

문장 생성, In Context-free Grammar

~ 문장 형태의 스트링에 생성 규칙 반복 적용

~ Nonterminal 확장

~ 산술식

E → E+E | E*E | (E) | -E | id

문장을 얻기 위해 시작 심볼 E로부터 반복적으로 생성 규칙 적용

E ⇒ -E ⇒ - ( E ) ⇒ - ( id )

Page 32: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

생성 규칙 오른쪽, Nonterminal이 존재

~ 같은 문장을 유도하는 여러 가지 방법이 가능

~ 유도시 대치해야 할 Nonterminal을 선택 ??

여러 가지 경우가 존재

~ 예. A ⇒ B C D

Page 33: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

좌측 유도 v.s 우측유도

좌측 유도(Left derivation)

~ 문장 형태의 가장 왼쪽에 있는 Nonterminal을 대치

~ 좌문장 형태(Left-sentential form)

우측 유도(Right derivation)

~ 문장 형태의 가장 오른쪽에 있는 Nonterminal을 대치

~ 우문장 형태(Right-sentential form)7

Page 34: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

문장 -(id+id)가 유도되는 과정

~ 좌측 유도

E ⇒ -E ⇒ -(E) ⇒ -(E+E) ⇒ -(id+E) ⇒ -(id+id).

우측 유도

E ⇒ -E ⇒ -(E) ⇒ -(E+E) ⇒ -(E+id) ⇒ -(id+id).

Page 35: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

좌파스 vs. 우파스

좌파스(left parse)

~ 좌측 유도에서 적용된 일련의 생성 규칙 순서.

~ top-down parsing

~ 시작 심볼로부터 터미널 생성(확장, expansion)

우파스(right parse)

~ 우측 유도에서 적용된 생성 규칙 번호의 역순.

~ bottom-up parsing

~ 터미널로부터 넌터미널로 축약하여 시작 심볼에 도착(축약, reduce)

Page 36: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

예, 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.

Page 37: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

구문 분석기의 출력, 유도 트리

~ 문장의 유도 트리를 결정적으로 구성

~ 모호하지 않은 문법(Unambiguous Grammar)

~ 결정적 파싱(Deterministic Parsing)

모호하지 않은 문법 구성

모호한 문법을 모호하지 않은 문법으로 변환.

Page 38: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

CFG 표기법

문법 표기법

~ BNF(Backus-Naur Form)

~ 확장된 BNF(EBNF, Extended-BNF)

~ 문법 흐름도(Syntax diagram)

Page 39: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

BNF

~ 프로그래밍 언어의 형식적 정의

~ Nonterminal 심볼 : < 와 >

~ Terminal 심볼 : ‘ 문자 ’

~ 명칭(Identifier)에 대한 표현

<id> ::= <letter> | <id> <letter> | <id> <digit>

<letter> ::= a|b|c|...|y|z

<digit> ::= 0|1|2|...|8|9

::= : →

| : 택일(alternation)

Page 40: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

EBNF

~ 반복, 선택적인 부분을 간결하게 표현

~ 특수한 의미를 갖는 메타 심볼(meta symbol) 도입

~ 메타 심볼(Meta Symbol)

언어의 일부분이 아니라 언어를 표현하려고 사용된 특수심볼.

Page 41: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

반복 부분(repetitive part) 표현

~ { }

~ {a}

a가 영번 이상 반복

정규 표현 a*와 같은 의미

콤마로 구분되는 명칭 리스트 : BNF 및 EBNF

~ BNF

<id_list> ::= <id_list> , <id> | <id>

~ EBNF

<id_list> ::= <id> { , <id> }

Page 42: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

혼합문에 대한 BNF 및 EBNF 표현

~ BNF 표현

<compound_statement> ::=

begin <statement_list> end

<statement_list> ::=

<statement_list> ; <statement> |

<statement>

~ EBNF 표현

<compound_statement> ::=

begin <statement> { ; <statement> } end

Page 43: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

반복되는 최대 회수와 최소 회수 지정

<external_name> ::= <alphabet> {<alphanumeric>}7

<alphanumeric> ::= <alphabet> | <digit>

<alphabet> ::= a|b|c|…|y|z

<digit> ::= 0|1|2|…|9

중괄호 뒤의 0은 최소 회수, 7은 최대 회수

0

Page 44: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

선택적인 부분(optional part)

~ [ ]

~ [x]

x가 나타나지 않거나 한번만 나타날 수 있음

[x]는 {x}1

~ 예

<if_st> ::= if <cond> then <stat> [else <stat>]

Page 45: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

단순 변수, 일차원 배열 변수 BNF 및 EBNF 표현

~ BNF 표현 :

<variable> ::= <id> | <id> '[' <exp> ']'

~ EBNF 표현 :

<variable> ::= <id> [ '[' <exp> ']‘ ]

Page 46: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

괄호와 택일 기호 : ( | )

~ 여러개의 생성 규칙을 간단히 표현

<exp> ::= <exp> + <exp> | <exp> - <exp> |

<exp> * <exp> | <exp> / <exp>

<exp> ::= <exp> ( + | - | * | / ) <exp>

Page 47: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

EBNF 메타 심볼 vs. terminal 심볼

~ terminal 심볼을 '와 '로 묶어 표현

<BNF_rule> ::= <left_part> '::=' <right_part>

<right_part> ::= <right_part_element> { '|’

<right_part_element> }

Page 48: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

문법 흐름도(Syntax diagram)

~ 문법을 도식화하여 표현

초보자가 프로그래밍 언어의 문법을 쉽게 이해

~ 구성

사각형 :Nonterminal

타원 : Terminal

지시선 : 문법이 움직이는 경로(path)

Page 49: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

Nonterminal A

~ 사각형 안을 A

~ terminal의 경우와 같이 지시선

~ 사각형의 내용은 그 안의 이름에 의해 참조

A

Terminal a

타원안을 a

지시선으로 연결

a

Page 50: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

생성 규칙 A ::= X1 X2... Xn

~ Xi가 Nonterminal인 경우

~ Xi가 terminal인 경우

X1 X3 Xn...X2

...x1 x2 xnx3

Page 51: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

A ::= α1|α2| . . . |αn

α1

αi

αn

A

Page 52: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

EBNF A ::= {α}

EBNF A ::= [ α ]

α

A

α

A

Page 53: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

EBNF A ::= ( α1 | α2 ) β

α2

A

α1

β

Page 54: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

푸시다운 오토마타

푸시다운 오토마타(Push-Down Automata; PDA)

~ 보조 기억장치를 가진 인식기.

~ Context-Free Grammar 인식기.

구성

~ 유한 상태 제어(finite state control)

전체의 행동 제어

현재의 입력 심볼, 스택의 top 심볼에 따라 행동

~ 입력 테이프(input tape)

입력 스트링 유지

~ 스택(stack)

보조 기억장치, 푸시다운 리스트(push-down list)

Page 55: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

Push Down Automata, PDA

a1 a2 . . . an

Finite state

control

Input tape

Z1

stack

Z2

Zn

Page 56: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

PDA P = (Q, Σ, Γ, δ, q0 , Z0, F)

~ Q : 상태의 유한 집합

~ Σ : 입력 알파벳의 유한 집합

~ Γ : 스택 심볼의 유한집합

~ δ : 사상 함수 Q × (Σ∪{ε} ) × Γ → Q × Γ*

~ q0 ∈ Q : 시작 상태(start state)

~ Z0 ∈ Γ : 스택의 시작 심볼

~ F ⊆ Q : 종결 상태(final state)의 집합

Page 57: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

사상 함수(전이 함수) : δ, delta

δ(q, a, Z) = { (p1,α1), (p2,α2), . . . ,(pn,αn) }

~ 현재의 상태 : q

~ 입력 심볼 : a

~ 스택 Top 심볼 : Z

~ (pi,αi) 선택

현재의 q 상태에서 입력 a를 본 다음 상태 : pi

스택 top 심볼 Z를 αi로 대치.

Page 58: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

PDA 형태(configuration) : P~ 어떤 시점에서 PDA P의 현재 상태 표현 방법

~ Q × Σ* × Γ* => Triple(q, ω, α)

q : 현재 상태

ω : 읽지 않은 입력 부분

α : 스택의 내용

~ ω = ε인 경우, 모든 입력 심볼이 읽혀졌음

~ P 에 의한 상태 이동(move) : |--

(q, aω, Zα) |-- (q', ω,Υα)

Page 59: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

인식(accept)

~ 시작 상태에서 입력 스트링 ω를 다본 상태가 종결 상태에 도달

~ "ω는 P에 의해 인식(accept)"

~ P에 의해 정의되는 언어

푸시다운 오토마타 언어 : L(P)

P에 의해 인식되는 스트링의 집합

~ L(P) = {ω|( q0,ω, Z0) |-- (q, ε, α), q∈F, α∈Γ*}

Page 60: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

언어 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)

Page 61: Grammar and Recognizer - compiler.sangji.ac.krcompiler.sangji.ac.kr/lecture/plt/2017/lecture02.pdf · 푸시다운오토마타 푸시다운오토마타(Push-Down Automata; PDA) ~

입력 스트링 0011에 대하여 P가 인식하는 과정

(q0, 0011, Z) |-- (q1, 011, 0Z)

|-- (q1, 11, 00Z)

|-- (q2, 1, 0Z)

|-- (q2, ε, Z)

|-- (q0, ε, ε)