180 likes | 366 Views
2. 형ì‹ì–¸ì–´ (Formal Language). 2-1. í˜•ì‹ ì–¸ì–´ì˜ ì •ì˜ 2-2. í˜•ì‹ ì–¸ì–´ì˜ ë¬¸ë²• (Formal Grammar) 2-3. í˜•ì‹ ì–¸ì–´ì˜ ë¬¸ë²•ì˜ ë¶„ë¥˜. 2-1. 형ì‹ì–¸ì–´ì˜ ì •ì˜. ì •ì˜ ëª‡ ê°œì˜ ìˆ˜í•™ì 구조와 함께 기호ì ìŠ¤íŠ¸ë§ (Symbolic string) 들로 구성 ì–´ë–¤ alphabet ì—서 Symbol 들로 구성ë˜ëŠ” string ì˜ ì§‘í•©. (character, ë¬¸ìž ). ì •ì˜ 2.0 Symbol : ì–¸ì–´ì— ìžˆì–´ì„œ 가장 ê¸°ë³¸ì´ ë˜ëŠ” 요소
E N D
2. 형식언어 (Formal Language) 2-1. 형식 언어의 정의 2-2. 형식 언어의 문법 (Formal Grammar) 2-3. 형식 언어의 문법의 분류
2-1. 형식언어의 정의 • 정의 • 몇 개의 수학적 구조와 함께 기호적 스트링 (Symbolic string)들로 구성 • 어떤 alphabet에서 Symbol들로 구성되는 string의 집합
(character, 문자) • 정의 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이다. (단어)
정의 2.3 • String 길이 : String을 이루는 Symbol의 개수 예 : = 0110 || = 4 u = dog |u| = 3 = house || = 5 • 정의 2.4 • String 접속(Concatenation) : String의 연속 연결 해 놓은 것 • u = a1····· an, = b1·····bn • u· = a1·····anb1·····bn, |u| = |u| + || = n + m • u· = u u (교환법칙 성립 안 함) 예 : |u| = dog = 3 || = house = 5 u· = u = doghouse |u| = 8
정의 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 R = cba = 12····n R = n···· 21
정의 2.6 • T* : empty string을 포함한 T에 속하는 Symbol로 이루어 질 수 있는 모든 string의 집합 예 : T = {0, 1} T* = {, 0, 1, 00, 01, 10, 11, 000, ···} • T+ : T* - {} 예 : T = {a, b} T+ = {a, b, aa, ab, ba, bb, aaa, aab, ··· } • 정의 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 }
정의 2.8 • 언어의 곱 (Product) • L·L´ = LL´ = {xy | x L, y L´} LL´ 예 : 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
i=0 • 정의 2.10 • 언어 L의 L*(reflexive transitive closure) • L* = L0L1L2·····Ln···· = Li • 정의 2.11 • 언어 L의 L+(transitive closure) • L+ = L1L2L3·····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)로 읽는다
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
예제 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 5. <article> The 6. <noun> Boy | Girl derivation(replacement:유도) <sentence> => <subject><verb><object>. => <article><noun><verb><object>. => The <noun><verb><object>. => The Boy <verb><object>. => The Boy Loves <object>. => The Boy Loves <article><noun>. => The Boy Loves The <noun>. => The Boy Loves The Girl. Left most derivation Top-down방식 Right most derivation Bottom-up방식 Sentence Form Sentence
+ * • 정의 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
* * • 정의 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} *
예제 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(G3) = {anbncn | n 1} 예제 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 L(G2) = {a2n+1 | n 0} 주어진 문법으로부터 생성되는 언어를 찾는 과정은 일정한 규칙이 없기 때문에 반복적인 연습이 필요하다.
문법 작성 • 특정한 형태의 언어를 생성하는 문법을 만드는 일 예제 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
예제 2 L2 = {0i1j | ij, i, j 1} • i > j 일 때, 0이 많은 경우, 같은 수의 0과 1을 생성하고, 남은 0을 생성을 하면 된다. S 0A1 A 0A1 | 0A | 0 • i < j 일 때, 1이 많은 경우, 같은 수의 0과 1을 생성하고, 남은 1을 생성을 하면 된다. S 0B1 B 0B1 | B1 | 1 S 0A1 | 0B1 A 0A1 | 0A | 0 B 0B1 | B1 | 1 같은 언어를 생성하는 문법은 여러 형태가 될 수 있다. 주어진 문법으로부터 생성되는 언어는 유일하지만 주어진 언어를 생성하는 문법은 다양한 형태가 될 수 있다.
2-3. 형식 언어의 문법의 분류 • Chomsky 4 type Grammar • 생성 규칙의 형태에 따라 구분 • Type 0(Unrestricted Grammar) • 생성 규칙에 어떤 제한도 두지 않는다. (위축형 문법) 예제 ) bc b • Type 1(Context-sensitive Grammar :csg) • 오른쪽이 왼쪽보다 같거나 긴 생성규칙 • || || 예제) P : A abc A aABc Bb BC CB cc bc c (X)
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로 구성 • A tB A t t Vt A,B VN (right linear regular grammar) • A Bt A t t Vt A,B VN (left linear regular grammar) 예제 ) L(G3) = {anbam | n, m 1} G3 =({S,B,C}, {a,b}, P, S), P : S aS S aB B bC C aC C a * *
정규언어 Context-free 언어 Context-sensitive 언어 Unrestricted 언어 언어의 포함관계 문법형태에 따른 언어와 인식기