형식 언어

Download Report

Transcript 형식 언어

컴파일러 입문
제2장
형식 언어
목 차
2-1. 형식 언어의 정의
2-2. 형식 언어의 문법 (Formal Grammar)
2-3. 형식 언어의 문법의 분류
Inroduction to FL theory
Page 2
2-1. 형식언어의 정의

정의


몇 개의 수학적 구조와 함께 기호적 스트링
(Symbolic string)들로 구성
어떤 alphabet에서 Symbol들로 구성되는
string의 집합
Inroduction to FL theory
Page 3

정의 2.0

Symbol : 언어에 있어서 가장 기본이 되는 요소
예 : 0, 1, ㄱ, A

정의 2.1

Alphabet : Symbol들의 유한 집합
예 : T1 = {0, 1} ,

T2 = {ㄱ,ㄴ,·····,ㅎ,ㅏ,ㅑ,····,ㅡ,ㅣ}
정의 2.2

String : Alphabet T에 속하는 Symbol이나 T에 속하는 하나이상의
Symbol 연결
예 : T = {a, b}일 때, a, b, aa, ab, ba, bb, aaa, ····· 는
모두 T에서 만들 수 있는 String이다.
Inroduction to FL theory
Page 4

정의 2.3

String 길이 : String을 이루는 Symbol의 개수
예 :  = 0110
u = dog
 = house

|| = 4
|u| = 3
|| = 5
정의 2.4

String 접속(Concatenation) : String의 연속 연결 해 놓은 것



u = a1····· an,  = b1·····bn
u· = a1·····anb1·····bn,
|u| = |u| + || = n + m
u· = u  u (교환법칙 성립 안 함)
|| = house = 5
예 : |u| = dog = 3
u· = u = doghouse
|u| = 8
Inroduction to FL theory
Page 5

정의 2.5

empty string : 길이가 0인 string : 문자열이 없는 것




(epsilon), (lambda)로 표현 || = || = 0
예 : u = u = u , u = u, dog··house = doghouse
l(l+d)* ===> A· = A
an : a가 n개 연결된 string을 표시
예 : a5 = aaaaa
a0 : empty String
R : String의 역순
예 :  = abc
 = 12····n
R = cba
R = n···· 21
Inroduction to FL theory
Page 6

정의 2.6



T* : empty string을 포함한 T에 속하는 Symbol로 이루어
질 수 있는 모든 string의 집합
T* = {, 0, 1, 00, 01, 10, 11, 000, ···}
예 : T = {0, 1}
T+ : T* - {}
T+ = {a, b, aa, ab, ba, bb, aaa, aab, ··· }
예 : T = {a, b}
정의 2.7

Alphabet T에 대하여 언어 L은 T*의 부분집합 이다.
예 : T = {a, b}
L1 = T* = {, a, b, ab, ba, ···}
L2 = { a, ba, aba}
L3 = {ap | p는 소수(prime number)}
L4 = {anbn | n 1 }
Inroduction to FL theory
Page 7

정의 2.8



언어의 곱 (Product)
L·L´ = LL´ = {xy | x L, y  L´}  L´L
예 : L = {a, b} L´ = { ab, bc, cc}
LL´ = { a, b} ·{ab, bc, cc} = {aab, abc, acc, bab, bbc, bcc}
정의 2.9


L의 거듭제곱
(Power)
예 : L = {a, ba, aab}
L0 = {}
L1 = {a, ba, aab}
L2 = L·L = {a, ba, aab}·{a, ba, aab}
= {aa, aba, aaab, baa, baba, baaab, aaba, aabba, aabaab}
Ln = L·Ln-1
Inroduction to FL theory
Page 8


정의 2.10

언어 L의 L*(reflexive transitive closure)

L* = L0L1L2·····Ln···· =  Li
정의 2.11

언어 L의 L+(transitive closure)

L+ = L1L2L3·····Ln···· = L* - L0
예 : l = {A,·····,Z} ,
d = {0,····,9}
ld = {A,·····,Z}·{0,····,9}
= {A0,A1,·····, A9,B0,B1,····B9,C0,····,Z0,····Z9}
: 하나의 영문자와 숫자하나와의 조합을 표시
ll : 두개의 영문자
l4 : 4자리의 영문자
 L*는 엘 스타(L star)로, L+는 엘 대거(L dagger)로 읽는다
Inroduction to FL theory
Page 9
2-2.형식언어의 문법(Formal Grammar)

정의 2.12
G = ( VN, VT, P, S )




VN : non-terminal Symbol의 유한집합
VT : terminal Symbol의 유한집합
 VN VT = 
V(Vocabulary) = VN  VT
P : 생성규칙의 유한집합
    (유도)
 V+   V*
S : start Symbol  VN
Inroduction to FL theory
Page 10
예제
VN = {<sentence>,<subject>,<verb>,<object>,<noun>,<article>}
VT = {The, Boy, Girl, Loves, .}
S = <sentence>
P : 1. <sentence>  <subject><verb><object>.
2. <subject>  <article><noun>
3. <object>  <article><noun>
4. <verb>  Loves
Left most derivation
5. <article>  The
Top-down방식
6. <noun>  Boy | Girl
derivation(replacement:유도)
<sentence> => <subject><verb><object>.
=> <article><noun><verb><object>.
=> The <noun><verb><object>.
=> The Boy <verb><object>.
Sentential Form
=> The Boy Loves <object>.
=> The Boy Loves <article><noun>.
=> The Boy Loves The <noun>.
Sentence=> The Boy Loves The Girl.
Inroduction to FL theory
Right most derivation
Bottom-up방식
Page 11

정의 2.13


derivation(유도) : 한 String에서 생성 규칙을 한 번 적용
해서 다른 Sting으로 바뀌어진다.
+
=>
: 한 번 이상 유도
=> : 0*번 이상 유도
예제 1
G = ({S, A},{a, b}, P, S)
P : S  aAS S a
A SbA A ba A SS
i) S => a
ii) S => aAS
=> abaa
예제 2
P : S  aA | bB |
A  bS
B aS
i) S => aA
=> abS
=> ab
ii) S => bB
=> baS
=> ba
iii) S => aA
=> abS
=> abbB
=> abbaS
=> abba
Inroduction to FL theory
Page 12

정의 2.14



sentential form(문장형태) : S =>,  V*
sentence (문장) :   Vt
문장 형태 중 nonterminal symbol을 포함하지 않은 것
정의 2.15

L(G) = { | S => ,  Vt }
예제 3
G1 = ({S}, {a}, P, S)
P : S a | aS
i) S => a
ii) S => aS
=> aa
iii) S => aS
=> aaS
=> aaa
L(G1) = { an | n 1}
Inroduction to FL theory
Page 13
예제 4
G2 = ({O, E} , {a}, P, O}
P : O a O  aE E  O
i) O => a
ii) O => aE
=> aaO
=> aaa
iii) O => aE
=> aaO
=> aaaE
=> aaaaO
=> aaaaa
예제 5
G3 = ({A, B, C}, {a, b, c}, P, A)
P : A abc
A  aBbc
Bb  bB
Bc  Cbcc
bC  Cb
aC  aaB
aC  aa
i) A => abc
ii) A => aBbc
=> abBc
=> abCbcc
=> aCbbcc
=> aabbcc
L(G2) = {a2n+1 | n 0}
L(G3) = {anbncn | n 1}
주어진 문법으로부터 생성되는 언어를 찾는 과정은 일정한
규칙이 없기 때문에 반복적인 연습이 필요하다.
Inroduction to FL theory
Page 14

문법 작성

특정한 형태의 언어를 생성하는 문법을 만드는 일
예제 1
L1 = {anbn | n 1}
i) 같은 수의 terminal symbol을 생성해야 하므로 nonterminal
symbol이 terminal symbol사이에 내장되어 있어야 한다.
S  aSb (embedded 생성규칙)
ii) 최소한의 terminal symbol은 nonterminal symbol을 필요로
하지 않기 때문에 따로 구분 지어 주어야 한다.
S  ab
 S  aSb | ab
Inroduction to FL theory
Page 15
예제 2
L2 = {0i1j | ij, i, j  1}
1) i > j 일 때, 0이 많은 경우,
같은 수의 0과 1을 생성하고, 남은 0을 생성을 하면 된다.
S  0A1
A  0A1 | 0A | 0
2)
i < j 일 때, 1이 많은 경우,
같은 수의 0과 1을 생성하고, 남은 1을 생성을 하면 된다.
S  0B1
B  0B1 | B1 | 1
 S  0A1 | 0B1
A  0A1 | 0A | 0
B  0B1 | B1 | 1
같은 언어를 생성하는 문법은 여러 형태가 될 수 있다.
주어진 문법으로부터 생성되는 언어는 유일하지만 주어진 언어를
생성하는 문법은 다양한 형태가 될 수 있다.
Inroduction to FL theory
Page 16
2-3. 형식 언어의 문법의 분류

Chomsky 4 type Grammar

생성 규칙의 형태에 따라 구분

Type 0(Unrestricted Grammar)

생성 규칙에 어떤 제한도 두지 않는다. (위축형 문법)
예제 )

bc  b
Type 1(Context-sensitive Grammar :csg)

오른쪽이 왼쪽보다 같거나 긴 생성규칙
 || ≤ ||
예제)
P : A  abc
Bb  BC
A  aABc
CB  cc
bc  c (X)
Inroduction to FL theory
Page 17

Type 2 (Context-free Grammar:cfg)


왼쪽은 하나의 nonterminal symbol만 가능
  
 : nonterminal
 V*
예제 )

L(G2) = {anban | n 1}
G2 = ({S, C}, {a, b}, P, S),
P : S  aCa
C  aCa
Cb
Type 3(Regular Grammar : rg : 정규문법)

왼쪽에 하나의 nonterminal symbol이 오고, 오른쪽도 최대한
하나의 nonteminal symbol이거나 terminal symbol로 구성

*  VN (right linear regular grammar)
A  tB A  t t  Vt A,B

A  Bt
예제 )
At
t  Vt A,B*  VN
L(G3) = {anbam | n, m 1}
G3 =({S,B,C}, {a,b}, P, S),
P : S  aS
S  aB
B  bC
C  aC
(left linear regular grammar)
Ca
Inroduction to FL theory
Page 18
Regular 언어
Context-free 언어
Context-sensitive 언어
Unrestricted 언어
 언어의 포함관계
Grammar
Language
Type 0(unresticted)
Type 1(context-sensitive)
Type 2(context-free)
Type 3(regular)
Recusively enumerable
set
Context-sentive
language
Context-free language
Regular language
Recongnizer
Turing machine
Linear bounded
automata
Pushdown automata
Finite automata
 문법형태에 따른 언어와 인식기
Inroduction to FL theory
Page 19