730 likes | 1k Views
주요 내용. 형식 언어와 문법 정규식과 정규 집합 유한 상태 기계 정규 문법과 유한 상태 기계와 정규집합. 언어 (language). S : 기호들의 집합 S * : S 로부터 만들어지는 모든 유한 스트링들 예 ) S: 알파벳 S * : 모든 가능한 문장들 Ex) S={ 정수 , +, -, x, , (, )} S * : 모든 가능한 수식들 (algebraic expressions) 언어 : 다음의 세가지 요소로 구성된다 . 기호들 ( 알파벳 ) 의 집합 S 가 반드시 존재한다 .
E N D
주요 내용 • 형식 언어와 문법 • 정규식과 정규 집합 • 유한 상태 기계 • 정규 문법과 유한 상태 기계와 정규집합
언어(language) • S : 기호들의 집합 • S*: S로부터 만들어지는 모든 유한 스트링들 • 예) S: 알파벳 • S*: 모든 가능한 문장들 • Ex) S={정수, +, -, x, , (, )} • S*: 모든 가능한 수식들(algebraic expressions) • 언어: 다음의 세가지 요소로 구성된다. • 기호들(알파벳)의 집합 S가 반드시 존재한다. • S로부터 문장들의 집합 S*를 형성하는 규칙이 반드시 • 존재한다. (syntax) • (3) 규칙에 합당하게 만들어진 문장들이 어떤 의미를 갖는지를 반드시 • 결정할 수 있어야 한다. (semantics)
Ex) “Going to the store John George to sing” “Noiseless blue sounds sit cross-legged under the mountain top.” Ex) ((3-2)(4x7)) 9 (2-3))+4 4-3-2 )2+(3-)x4 Syntax: the specification of the proper construction of sentence Semantics: the specification of the meaning of sentences
심벌(symbol):기호 알파벳(alphabet):기호들의 유한 집합 문자열(string):알파벳에 포함된 기호들이 나열된 것 단어(혹은 문장):알파벳의 기호들의 문자열 공 문자열(empty string):길이가 0인 문자열, 로 표시 (공집합과는 다르다.) V: 알파벳의 집합 V*: V에 속한 기호로 만들 수 있는 모든 문자열의 집합
문법(phase-structure grammar) Phase-structure grammar G=(V,T,S,P) V: 기호(문자열)의 집합 T: 단말 기호(terminal symbol) S: 시작 기호(start symbol, seed) P: 생성 규칙(production rule) (로 표시) If w w’, w is replaced by w’
예1: T={John, Jill, drives, jogs, carelessly, rapidly, frequently} N={sentence, noun, verbphrase, verb, adverb} V = T N S=“sentence” P: 생성 규칙 <sentence> <noun> <verbphrase> <noun> John <noun> Jill <verbphrase> <verb><adverb> <verb> drives <verb> jogs <adverb> carelessly <adverb> rapidly <adverb> frequently
“Jill drives frequently.”는 문법적으로 맞는 문장인가? <sentence> <noun> <verbphrase> Jill <verb><adverb> Jill drives frequently derivation tree(parse tree) sentence verbphrase noun adverb verb Jill frequently drives
예2: G=(V,T,S,P) N={S}, T={a,b}, V= T N, P={S aSb, S ab} 이때 단어 a3b3은 다음과 같이 유도된다. S aSb aaSbb aaabbb 예3: G=(V,T,S,P) N={S, A, B}, T={0,1}, V= T N P={S AB0, A BB, B 01, A1} 이때 단어 0101010은 다음과 같이 유도된다. S AB0 A010 BB010 0101010
derivation tree(parse tree) 예4: V={v0, w, a, b, c} N={v0, w} T={a, b, c} V = T N S= v0 P: 생성 규칙 v0 aw w bbw w c v0 a w b b w b b w b b w c Syntactically correct sentence abbbbbbc=a(bb)*c
언어와 문법 <정의> L(G): 문법 G의 언어 문법 G를 사용하여 만들어질 수 있는 문장들의 집합
예: G=(V,T,S,P) N={S}, T={a, b, A}, V= T N, P={S aA, S b, A aa} 생성 S aA와 A aa를 이용하면, aaa를 유도할 수 있고 생성 S b로부터 b를 유도할 수 있다. 따라서 문법 G로부터 유도되는 언어는 L(G)={b, aaa} 이다.
문법의 종류(1) 유형0 문법(비제한 문법) 생성에 아무 제약이 없다. 유형1 문법(문맥 의존 문법: context sensitive grammar) A B에서 B의 길이가 A보다 길거나 같고, 혹은 A 유형2 문법(문맥 자유 문법: context free grammar) A B에서 A는 비단말 기호(nonterminal symbol)이고 B는 하나 이상의 기호로 이루어져야 한다.
문법의 종류(2) 유형3 문법(정규 문법: regular grammar) A, B가 비단말 기호이고 a가 단말 기호일 때, A aB 혹은 A a 혹은 A
G=(V,T,S,P), N={A, B}, T={a, b} 예: (유형1) v0 aAB AB bB B b A aB 예: (유형2) v0 aBa B aBa B b 예: (유형3) v0 aB B bA, B b, A aB, A a
예1:유형3(정규) 문법 언어 {ambn|m,n>0}을 생성하는 문법 (1) G1=(V,T,S,P) V={S}, T={a,b}, P={S aS, S Sb, S } ={S aS|bS|} SaS aaSaaaS aaaSb aaaSbb aaabb (2) G2=(V,T,S,P) V={S, A}, T={a,b}, P={S aS, S bA, S b, A bA, A b, S } SaS aaSaaaS aaabA aaabb
예2:유형2 문법(context free) 언어 {anbn|m,n>0}을 생성하는 문법 G=(V,T,S,P) V={S}, T={a,b}, P={S aSb, S } ={S aSb|} SaSb aaSbbaabb
예3:유형1 문법(context sensitive) 언어 {anbncn|n>0}을 생성하는 문법 G1=(V,T,S,P) V={S, A, B}, T={a,b,c}, P={S aSAB, BA AB, aA ab, bA bb, bB bc, cB cc, S } SaSAB aaSABAB aaABAB aabABB aabbBB aabbcB aabbcc
문법의 표현 • BNF(Backus-Naur Form) 형식 • 문법 다이어그램(syntax diagram) • 유도 트리(derivation tree)
Backus-Naur Form(BNF) (1) 비단말 기호는 <a>로 표시한다. (2) 생성 은 ::=로 표시한다. (3) 하나의 비단말 기호로부터 생성되는 여러 개의 문자열은 |으로 구분한다. P: 생성 규칙 v0 aw w bbw w c P: 생성 규칙(BNF 표기법) <v0> ::= a<w> <w> ::= bb<w>|c
예1: C언어에서 사용되는 signed integer을 표기하기 위한 생성 규칙을 BNF로 표시하면. <signed integer> ::= <sign><integer> <sign> ::= +|- <integer> ::= <digit>|<digit><integer> <digit> ::= 0|1|2|3|4|5|6|7|8|9
예2: 앞에 예제에서 나왔던 문법을 BNF로 표시하면, P: 생성 규칙(BNF 표기) <sentence> ::= <noun><verbphrase> <noun> ::= John|Jill <verbphrase> ::= <verb><adverb> <verb> ::= drives|jogs <adverb>carelessly|rapidly |frequently P: 생성 규칙 <sentence><noun><verbphrase> <noun> John <noun> Jill <verbphrase> <verb><adverb> <verb> drives <verb> jogs <adverb> carelessly <adverb> rapidly <adverb> frequently
예3: Linux에서의 identifier T={a,b,c,…,z,, 0,1,2,..,9} N={identifier, remaining, digit, letter} S=identifier P: <identifier> ::= <letter>| <letter><remaining> <remaining> ::= <letter>|<digit>|<letter><remaining> |<digit><remaining> <letter> ::= a|b|c|…|z| <digit> ::= 0|1|2|…|8|9 identifier hw1.c remaining letter remaining letter h remaining w digit remaining letter 1 letter c
문법 다이어그램(syntax diagram) (1) 비단말 기호는 사각형으로, 단말 기호는 원으로 그린다. (2) 생성 과정은 화살표로서 표시한다. (3) 하나의 비단말 기호로부터 생성되는 여러 개의 문자열은 병렬로 놓고 화살표로 표시한다.
예1: 다음의 BNF 표기에 의한 생성 규칙은 문법 다이어그램으로 다음과 같이 표시할 수 있다. <w> ::= <w1><w2><w3>
예2: 다음의 BNF 표기에 의한 생성 규칙은 문법 다이어그램으로 다음과 같이 표시할 수 있다. <w> ::= <w1><w2> | <w1>a | bc<w2>
예3: 다음의 BNF 표기에 의한 생성 규칙은 문법 다이어그램으로 다음과 같이 표시할 수 있다. <w> ::= ab | ab<w>
주요 내용 • 형식 언어와 문법 • 정규식과 정규 집합 • 유한 상태 기계 • 정규 문법과 유한 상태 기계와 정규집합
정규식(regular expression) 정규 문법은 정규식으로 표현될 수 있으며 정규 문법에 의해서 생성되는 언어는 정규식에 의해서 만들어지는 정규 집합과 동일하다. * 문자열의 집합 (정규 집합) 기호들의 집합 (알파벳) 정규 문법 (정규식)
I : 기호(symbol)들의 집합(알파벳) I*: 집합 I의 기호들을 결합하여 만들어지는 유한 크기를 갖는 모든 문자열의 집합 ; 공 문자열(empty string) αβ : 문자열 α와 문자열 β의 연결(concatenation) α∪β : 두 문자열 α, β의 합집합 (∪는 +로도 표시한다.) (α)* : 문자열 α가 유한 개수만큼 반복되어 만들어지는 문자열 ∈(α)*, (α)*≡α* 예: a* = {, a, aa, aaa, aaaa, ...} a(b∪c) 혹은 a(b+c) = {ab, ac} ab(bc)* = {ab, abbc, abbcbc, abbcbcbc, ...}
정규식의 정의 • I: a set of alphabets • I에서 정의되는 정규식은 다음과 같이 재귀적으로 정의된다. • 공문자열 는 정규식이다. • αI라면 α는 정규식이다. • α과 β가 각각 정규식이면 αβ도 정규식이다. • α과 β가 각각 정규식이면 α β 도 정규식이다. • α가 정규식이면 α*도 정규식이다.
예1: I={a, b, c} 다음의 정규식은 (1) a* = {, a, aa, aaa, aaaa, …} (2) a(b+c) = {ab, ac} (3) ab(bc)* = {ab, abbc, abbcbc, …}
예2: I={0, 1} 다음의 정규식은 (1) 0*(0+1)* : 0과 1로 이루어진 모든 스트링 (2) 00*(0+1)*1: 0으로 시작해서 1로 끝나는 모든 스트링 (3) (01)*(01+1*)
예3: 101로 끝나는 단어들로 이루어진 언어 (0+1)*101 예4: 0 혹은 1로 이루어져 있고 1은 0이 나온 후에 나타나야 하는 언어 0* 1* 예5:최소한 세 개의 연속적인 1을 갖는 단어들 (0+1)* 111(0+1)* 예6:길이가 3의 배수인 문자열 ((0+1)(0+1)(0+1))*
정규 집합(regular set) I: a finite set of symbols I*: 정규 집합(regular set) 정규식으로 나타내지는 모든 문자열을 정규 집합이라고 한다. 예: I={a, b, c}, 그러면 I*=? 다음의 정규식으로 만들어지는 정규집합: a* I* ={, a, aa, aaa, aaaa, …} a(b+c) I* = {ab, ac} ab(bc)* I* = {ab, abbcbc, …}
다음과 같이 BNF로 표시된 생성 규칙은 정규식 a(bb)*c와 동일하다. <v0> ::= a<w> <w> ::= bb<w> | c 다음과 같은 문법 다이어그램으로 표시된 생성 규칙은 정규식 a∪b∪c*와 동일하다.
주요 내용 • 형식 언어와 문법 • 정규식과 정규 집합 • 유한 상태 기계 • 정규 문법과 유한 상태 기계와 정규집합
유한 상태 기계의 예 T: flip-flop 1 0 0 1 0 1 input 0 1 0 0 1 1 1 0 현재 상태
유한 상태 기계(finite state machine) 유한 상태 기계 (S, I, f) S: 상태의 집합(a set of states) I: 입력값의 집합(a set of inputs) f: 상태 추이 함수(state transition function) 예: Flip-flop에서 S = {0, 1} I = {0, 1} f(현재상태, 입력값)=결과 상태 f(0,0) = 0, f(1,0)=1, f(0,1)=1, f(1,1)=0
출력이 있는 유한상태 기계 자동 판매기를 모델링한다고 하자. 입력은 100원, 500원 동전을 입력하고 700원이 되었을 때 C와 S 버튼을 입력하면 콜라와 사이다가 나온다. 초과되는 금액은 반납한다.
자동 판매기의 모델링(1) 입력: (100, 500, C, S) 상태: (S0, S1,S2,S3,S4,S5,S6,S7) 출력: (n, 100, 200, 300, 400, 500, 콜라, 사이다)
정의: 출력이 있는 유한 상태 기계 출력이 있는 유한 상태 기계 (S, I, O, f, g, s0) S: 상태의 집합(a set of states) I: 유한의 입력 알파벳의 집합(a set of inputs) O: 유한의 출력 알파벳 f: 상태 추이 함수(state transition function) g; 출력 함수 s0: 초기 상태
출력이 있는 유한 상태 기계: 예1 S={s0, s1, s2, s3}, I={0,1}, O={0,1} 추이 함수 f와 출력 함수 g 상태 테이블 상태 도표 s1 0,1 1,0 1,0 1,1 0,1 s0 s3 0,0 start 0,0 s2 1,1
출력이 있는 유한 상태 기계: 예2 S={s0, s1, s2, s3, s4}, I={0,1}, O={0,1} 추이 함수 f와 출력 함수 g
출력이 없는 유한 상태 기계 유한 상태 오토마타(finite state automata)라고도 한다. 유한 상태 기계의 또 다른 형태로서 이 유형의 기계는 출력은 없고 최종 상태의 집합이 존재한다. 따라서 시작 상태에서 최종 상태에 도달하게 하는 입력값들만 이 기계는 인식하게 된다. 이러한 유형의 기계는 언어를 인식하는 기계를 모델링할 때 사용된다.
정의: 유한 상태 오토마타 유한 상태 오토마타 M=(S, I, f, s0, F) S: 유한한 상태 집합 I: 유한의 입력 알파벳의 집합 f: 상태 추이 함수, s0:초기 상태(starting states) F: 최종 상태(acceptance states)의 집합
예1 M={S, I, f, s0, F},S={s0, s1, s2}, I={0,1}, F= {s2} f input 상태 0 1 s0 s0 s1 s1 s2 s2 s2 s1 s0 1 0 0 s0 s1 s2 1 0,1