제 5 장 context-free 문법

33
컴컴컴컴 컴컴 컴컴컴컴 컴컴 컴 5 컴 Context-Free 컴컴

Upload: aiko

Post on 19-Jan-2016

54 views

Category:

Documents


0 download

DESCRIPTION

컴파일러 입문. 제 5 장 Context-Free 문법. 5.1 서론. regular expression : the lexical structure of tokens recognizer : FA(  scanner ) id = (l+_)(l+d+_) * , sc = "(a+\c ) * " CFG : the syntactic structure of programming languages recognizer : PDA(  parser ) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 제  5  장  Context-Free  문법

컴파일러 입문컴파일러 입문

제 5 장 Context-Free 문법

Page 2: 제  5  장  Context-Free  문법

regular expressionregular expression: the lexical structure of tokens recognizer : FA( scanner) id = (l+_)(l+d+_)* , sc = "(a+\c )*"

CFGCFG: the syntactic structure of programming languages recognizer : PDA( parser)

프로그래밍 언어의 구문 구조를 CFGCFG 로 표현할 경우의 장점 :

1. 간단하고 이해하기 쉽다 .2. CFG 로부터 인식기를 자동으로 구성할 수 있다 .3. 프로그램의 구조를 생성규칙에 의해 구분할 수 있으므로 번역시에 유용하다 .

Page 3: 제  5  장  Context-Free  문법

CFG 의 form : N. Chomsky 의 type 2type 2 grammar A , where A VN and V*.

recursive construction ex) E E OP E | (E) | -E | id

OP | | | /

VN = E, OP VT = (, ), , id, , , /

ex) <if_statement> 'if' <condition> 'then' <statement>

VN : < 와 > 사이에 기술된 symbol.

VT : ' 와 ' 사이에 기술된 symbol.

Page 4: 제  5  장  Context-Free  문법

Context-free Grammar

Derivation : 1 2

start symbol 로부터 sentence 를 생성하는 과정에서 nonterminal

을 이 nonterminal 로 시작되는 생성 규칙의 right hand side 로 대

치하는 과정 .

(1) : derives in one step.

if A P, , V* then A .

(2) : derives in zero or more steps.

1. V*,

2. if and then

(3) : derives in one or more steps.

*

**

+

*

Page 5: 제  5  장  Context-Free  문법

L(G) : the language generated by G = { | S , V∈ T*}

definition : sentence : S , VT* 모두 terminal 로만 구성 .

sentential form : S , V*.

Choosing a nonterminal being replaced sentential form 에서 어느 nonterminal 을 선택할 것인가 ?

A , where V*.

leftmost derivation: 가장 왼쪽에 있는 nonterminal 을 대치해 나가는 방법 . rightmost derivation: 가장 오른쪽에 있는 nonterminal 을 대치 .

*

*

*

Page 6: 제  5  장  Context-Free  문법

A derivation sequence 0 1 ... n is called a

leftmost derivation if and only if i+1 is obtained from

i by applying a production to the leftmost nonterminal

in i for all i, 0 i n-1.

i i+1 : 가장 왼쪽에 있는 nonterminal 을 차례로 대치 .

parse : parser 의 출력 형태 중에 한가지 . left parse : leftmost derivation 에서 적용된 생성 규칙 번호 .

top-downtop-down parsing start symbol 로부터 sentence 를 생성

right parse : rightmost derivation 에서 적용된 생성 규칙 번호의 역순 .

bottom-upbottom-up parsing sentence 로부터 nonterminal 로 reduce 되어 결국엔 start symbol

로 reduce.

Page 7: 제  5  장  Context-Free  문법

A1 A2

A

‥ ‥ An

::= a graphical representation for derivations.::= the hierarchical syntactic structure of sentences that is

implied by the grammar. Definition : derivation tree CFG G = (VN,VT,P,S) & VT

* drawing a derivation tree.

1. nodes: symbol of V(VN VT)

2. root node: S(start symbol) 3. if A VN, then a node A has at least one descendent.

4. if A A1A2...An P, then A 가 subtree 의 root 가 되고 좌로부터

A1,A2,...,An 가 A 의 자 노드가 되도록 tree 를 구성

Page 8: 제  5  장  Context-Free  문법

A1 A2

A

A2 A1

A

Nodes of derivation tree internal(nonterminal) node VN

external(terminal) node VT {}

ordered tree - child node 들의 위치가 순서를 갖는 tree, 따라서 derivation tree 는 ordered tree 이다 .

Page 9: 제  5  장  Context-Free  문법

예 ) G : E → E + T | T T → T * F | F F → ( E ) | a

: a + a * a 스트링 a + a * a 의 유도 트리 :

+

T

F

T F

E

aF

E

T

*

a a

※ 각각의 유도 방법에 따라 derivation tree 모양은 변하지 않는다 . 즉 , 한 문장에 대한 tree 모양은 unique하다 .

Page 10: 제  5  장  Context-Free  문법

Ambiguous Nondeterministic

(X)

(O)

Ambiguous Grammar A context-free grammar G is ambiguous if and only if it

produces more than one derivation trees for some sentence.

설명 : 같은 sentence 를 생성하는 tree 가 2 개 이상 존재할

때 이 grammar 를 ambiguous 하다고 하며 , 결정적인

파싱을 위해 nondeterministic 한 grammar 를 deterministic

하게 변환해야 한다 .

nondeterministic

Page 11: 제  5  장  Context-Free  문법

S

thenCif elseS S

thenCifb S

b a

a

1)S

thenCif S

thenCifb S else

b a

S

a

2)

“G: ambiguous 증명” 하나의 sentence 로 부터 2 개 이상의

derivation tree 생성 .

ex) dangling elsedangling else problem:

G: S if C then S else S | if C then S | a

C b

: if b then if b then a else a

Page 12: 제  5  장  Context-Free  문법

※ else : 일반적으로 right associativity 를 만족한다 . if 문장의 경우 자신과 가장 가까운 if 와 결합함으로 두개의 트리 중 일반적으로 2) 를 만족 .

In a more general form, the ambiguity appears when there is a production of the following form.

production form : A AA sentential form : AAA tree form :

or

A

A α A

A α A A α A

A

A α A

Page 13: 제  5  장  Context-Free  문법

ambiguous ambiguous unambiguous unambiguous 1) 새로운 nonterminal 을 도입해서 unambiguous grammar 로 변환 .

2) 이 과정에서 , precedence & associativity 규칙을 이용 .

nondeterministic deterministic

예 ) G : E E E | E + E | a

: a a + a precedence rule 의 적용

a +

1) + > *

a

E

E * E

E E

a

+

*

E E

E E

E

a

aa

2) * > +

Page 14: 제  5  장  Context-Free  문법

새로운 nonterminal 의 도입

G : E E + T | T

T T * F | F

F a

+

T

F

T F

E

aF

E

T

*

a a

※ , grammar ambiguity check algorithm unambiguous formal .

Page 15: 제  5  장  Context-Free  문법

unambiguous grammar 로 바꾼 예 :G : expression expression + term

┃ expression - term ┃ term term term * factor

┃ term / factor ┃ factor

factor primary ↑ factor ┃ primary

primary - primary ┃ element

element ( exp ) ┃ id

derivation tree 가 하나이므로 위 grammar 는 unambiguous하다 .

Page 16: 제  5  장  Context-Free  문법

id * id + id 의 derivation tree:

derivation tree 가 하나 이므로 위 grammar 는 unambiguous 하다 .

expression

expression term

term factor

term factor

factor primary

primary element

element id

id

primary

element

id

+

*

Page 17: 제  5  장  Context-Free  문법

5.3.1 Introduction

5.3.2 Useless Productions

5.3.3 -Productions

5.3.4 Single productions

5.3.5 Canonical Forms of Grammars

Page 18: 제  5  장  Context-Free  문법

Given a grammar, it is often desirable to modify the grammar so that a certain structure is imposed on the language generated.

grammar transformations without disturbing the language generated.

Definition : Two grammars G1 and G2 are equivalent if L(G1) = L(G2).

Two techniques Substitution :

if A B, B 1 | 2 | 3 … | n P, then

P' = ( P - {A B } ) {A 1 | 2 | ... | n }.

Expansion : A <=> A X, X or A X, X ex) P : S aA | bB A bB | b B aA | a

All grammars can be transformed the equivalent grammars through the substitution and expansion techniques.

Context-free Grammar

Page 19: 제  5  장  Context-Free  문법

A useless productionuseless production in a context-free grammar is one which can not be used in the generation of a sentence in the language defined by the grammar.

it can be eliminated.

Definition : We say that a symbol X is useless if not S ∃ Xy xy, ,x,y VT

*.

Splitting up into two distinct problems: Terminating nonterminal : A , , where A VN and VT

*.

Accessible symbol : S X, where X V and ∈ , V*.

An algorithm to remove useless productions will involve computing the terminating nonterminals followed by the accessible symbols.

Context-free Grammar

**

*

*

Page 20: 제  5  장  Context-Free  문법

Terminating nonterminal 을 구하는 방법 :

Algorithm terminating; begin

VN':= { A | A P, ∈ ∈ VT* };

repeat VN' := VN' { ∪ A | A P, ∈ (∈ VN' U VT )* }

until no change end.

Accessible symbol 을 구하는 방법 :

Algorithm accessible; begin

V ' := { S }; (* initialization *) repeat

V ' := V ' { ∪ X | some A X P, A ∈ ∈ V ' }

until no change end.

Page 21: 제  5  장  Context-Free  문법

Useless production removal : Apply the algorithm for the terminating nonterminal. Apply the algorithm for the accessible symbol.

ex) S A | B

A aB | bS | b

B AB | BB

C AS | b

Page 22: 제  5  장  Context-Free  문법

Definition : We call that a production is if the form of the production

is A , A VN.

Definition :

We say that a CFG G = (VN, VT, P, S ) is -free if

P has no -production, or

There is exactly one -production S and S does not appear

on the right hand side of any productions in P.

Page 23: 제  5  장  Context-Free  문법

Conversion to an -free grammar:

Algorithm -free;begin

VN := { A | A => , A VN }; (* nullable nonterminal *)

P' := P – { A | A VN };

for A 0B11B2... Bkk P∈ ' , where i ≠ and Bi VN do

if Bi P' then∈

P' = P' { A ∪ 0X1 1X2... Xkk | Xi = Bi or Xi = }else

P' = P' { A ∪ 0X1 1X2... Xkk | Xi = }end if

end for

if S VN then P ' := P ' { S∪ ' | S } end.

ex1) A AaA | ε ex2) S aAbB A aA | ε

B ε

*

Page 24: 제  5  장  Context-Free  문법

Definition : A B, where A,B VN. Algorithm Remove_Single_Production;

begin

P' := P – { A B | A, B VN};

for each A VN do

VNA = { B | A B } ;

for each B VNA do for each B P' do (* not single production *) P' := P' { ∪ A α}

end for end for

end for end.

main idea : grammar grammar substitutionsubstitution.

+

Page 25: 제  5  장  Context-Free  문법

ex) S aA | A

A bA | C

C c

S aA | bA | c

A bA | c

C c

Definition :

A CFG G = ( VN , VT, P, S ) is said to be cycle-free if there is no

derivation of the form A A for any A in VN.

G is said to be proper if it is cycle-free, is -free, and has no useless symbols.

+

Page 26: 제  5  장  Context-Free  문법

☞ BNF(Backus-Naur Form), EBNF(Extended BNF), Syntax Diagram

BNF 특수한 meta symbol 을 사용하여 프로그래밍 언어의 구문을 명시하는 표기법 . meta symbol : 새로운 언어의 구문을 표기하기 위하여 도입된 심벌들 .

terminal symbol : ‘ ’ grammar symbol : VN ∪ VT

nonterminal symbol < > ::= ( 치환 )nonterminal symbol 의 rewriting | ( 또는 )

Page 27: 제  5  장  Context-Free  문법

예 1) VN = {S, A, B}, VT = {a, b}

P = {S AB, A aA, A a, B Bb, B b}

BNF 표현 :

<S> ::= <A> <B>

<A> ::= a <A> | a

<B> ::= <B> b | b

예 2) Compound statement

BNF 표현 :

<compound_statement> ::= ‘{’<statement_list> ‘}’ <statement_list> ::= <statement_list> <statement> | <statement>

<S> ::= <A> <B> <A> ::= ' a ' <A> | ' a ' <B> ::= <B> ' b ' | ' b '

Page 28: 제  5  장  Context-Free  문법

Extended BNF(EBNF) 특수한 의미를 갖는 meta symbol 을 사용하여 반복되는 부분이나 선택적인 부분을 간결하게 표현 . meta symbol

예 1) <compound_statement> ::= ‘{’ <statement> {<statement>} ‘}’

예 2) <if-st> ::= 'if' ‘(’ <expression> ‘)’ <statement> [‘else’ <statement>]

예 3) <exp> ::= <exp> + <exp> | <exp> - <exp> | <exp> <exp> | <exp> / <exp> <exp> ::= <exp> ( | | | / ) <exp>

반복되는 부분 (repetitive part): { } 선택적인 부분 (optional part): [ ] 괄호와 택일 연산자 (alternative): ( | )

Page 29: 제  5  장  Context-Free  문법

Syntax diagram 초보자가 쉽게 이해할 수 있도록 구문 구조를 도식화하는 방법 syntax diagram 에 사용하는 그래픽 아이템 :

원 : terminal symbol 사각형 : nonterminal symbol 화살표 : 흐름 경로

syntax diagram 을 그리는 방법 :1. terminal a

2. nonterminal A

a

A

Page 30: 제  5  장  Context-Free  문법

3. A ::= X1X2... Xn

(1) Xi 가 nonterminal 인 경우 :

(2) Xi 가 terminal 인 경우 :

4. A ::= 1┃2┃...┃ n

X1 Xn····A X2

X1 Xnz ····A X2

α1

α2...

αn

A

Page 31: 제  5  장  Context-Free  문법

5. EBNF A ::= {}

6. EBNF A ::= []

7. EBNF A ::= (1┃2)

α

A

A

α

α1

α2

βA

Page 32: 제  5  장  Context-Free  문법

( 예 ) A ::= a | (B) B ::= AC C ::= {+A}

A CB

A

C

+

A

( B )

α

Page 33: 제  5  장  Context-Free  문법

A

( A )

α

A +