오토마타 및 형식언어 김 현성

Download Report

Transcript 오토마타 및 형식언어 김 현성

오토마타 및 형식언어
김현성
Tel : 850-7288
Office : 2공학관 408호
E-mail : [email protected]
사람의 언어
1더하기 2는 뭐야?
뭐라고?
컴퓨터의 언어
1+2=?
3
100 001 010
프로그래밍
언어
011
Three Basic Concepts(1/2)
• Languages
• Grammars
• Automata
Automata(1/2)
• Abstract model of a digital computer
Input file
Storage
Control unit
Output
Automata(2/2)
0
0
1
0
q0
q1
1
q2
1
Three Basic Concepts(2/2)
Languages
Grammars
Automata
Grammar, Languages,
Recognizer
Grammar
Type 0
Type 1
Language
recursively enumerable sets
context-sensitive language
Recognizer
Turing machine
Linear bounded
automata
Type 2
Type 3
context-free language
regular language
Pushdown automata
Finite automata
Chomsky’s Language Hierarchy
Regular Languages
Context-free Languages
Context-sensitive Languages
Unrestricted Languages
Applied Area
• Compiler
– Finite Automata
– lexical analysis (parser)
• Digital Design
– binary adder
계산이론개요
목적
• 컴퓨터 공학 분야에는 몇 가지 공통적인
기본 원리가 존재
• 기본 원리를 이해하기 위해서는 추상적
모델을 설정해야 한다
• 추상적 모델 => 하드웨어 및 소프트웨어
에서 공통적으로 나타나는 특징들을 표
현하기 위한 모델
목적
• 추상적 모델 => 오토마타
• 오토마타는 입력, 출력, 기억장소로 구성
• 형식언어는 프로그래밍언어들의 일반적인 특
성들을 추상화한 개념
• 형식언어는 심볼들과 심볼들의 조합인 문장을
구성하는 형식규칙들의 집합
• 형식언어는 이 형성규칙들에 의해 생성되는 모
든 문자열들의 집합
우리는 경일대인이다.
한국어
경일대인은 나다.
목적
• 개념탐구 방법
– 직관적인 방법
– 수학적인 방법
•
•
•
•
•
집합론
함수
관계
트리
그래프
함수(1/2)
함수란 한 집합의 원소들 각각에 대해 다른 집합의 유일한
원소로 배정하는 규칙
F
domain
S1
:
S1
S2
range
S2
domain
range
X
Y
함수(2/2)
• 함수의 표현
– {(x1,y1),(x2,y2),…}
– xi : 해당함수의 정의역의 원소
– yi : 해당함수의 치역의 대응값
– 각 xi가 이 집합 내에서 순서쌍의 첫 번째 위
치에 최대 한번만 나타나야 한다.
오토마타
0
0
1
0
q0
q1
1
q2
1
그래프 (1/2)
• 그래프는 두개의 유한집합으로 구성된 구조
– 정점들의 집합the set of vertices
– 간선들의 집합the set of edges
– 간선들의 순서열a sequence of edges - 보행walk
– 어느 간선도 중복하여 지나지 않는 보행a walk in which no
edge is repeated - 경로path
– vi로 부터 vi로 경로no repeated edge - 사이클cycle
그래프(2/2)
v1
v2
v3
트리(1/2)
• 그래프의 한 종류이다.
• 사이클을 갖지 않고, 루트라 불리는 특별한 하
나의 정점을 가지는 유향 그래프
–
–
–
–
–
–
루트root : one distinct vertex
리프들leaves
부모parent
자식child
레벨level
높이height
트리(2/2)
Root
Level 0
Height = 3
Leaf
Level 3
증명기법(2/2)
• Proof by induction
– 몇 개의 특정 사례가 참이라는 사실들로부터 여러
문장들이 참임을 추론해 내는 기법
– 예) 참임을 증명하고자 하는 문장들의 순서열
P1,P2,… 이 있다고 하고 다음이 성립함을 가정
귀납기저
• 임의의 k(k>=1)에 대해 P1,P2,…,Pk는 참이다.
• n>=k인 모든 n에 대해서 P1,P2,…,Pn이 참인 사실이 Pn+1
이 참임을 의미하도록 하는 문제
귀납가정
귀납단계
Example 1.5 : 높이가 n인 이진트리의
리프 노드의 총 개수는 최대 2n 임
l(n)  2n
Basis l(0) = 1 = 20
Inductive Assumption: l(i)2i
For i = 0, 1, …, n
Inductive Step : l(n+1) = 2l(n)
l(n+1) 2 * 2n = 2n+1
언어, 문법, 오토마타
세가지 기초 개념
• 언어Languages
• 문법Grammars
• 오토마타Automata
언어(1/3)
• 알파벳 {a, b, c, d}
– 하나 이상의 심볼들의 유한 집합
• 문자열 {ab, aabb, ccdd}
– 알파벳에 속한 심볼들의 유한 길이의 순서열
언어(2/3)
• w = a1a2…an v = b1b2…bn
–
–
–
–
–
접합concatenation : wv = a1a2…anb1b2…bn
전도reverse : wr = an…a2a1
길이length : |w| = n
빈문자열empty string : | | = 0, w = w = w
부문자열substring : w = vu v = 접두부prefix,
u = 접미부suffix
– |uv| = |u| + |v|
언어(3/3)
• 스타폐포star-closure
– L* = L0 U L1 U L2 …
• 양성폐포positive-closure
– L+ = L1 U L2 ...
문법(1/3)
• 영어 문법
“문장은 명사절(noun phrase)과 술부
(predicate)로 구성”
문법(2/3)
• A boy runs
– <sentence> -> <noun_phrase><predicate>
– <noun_phrase> -> <article><noun>
– <predicate> -> <verb>
• Pascal identifier
– <id> -> <letter><rest>
– <rest> -> <letter><rest> | <digit><rest> |
– <letter> -> a|b|…| <digit> -> 0|1|…9
문법(3/3)
• 문법 G 는 다음의 항으로 정의된다
G = (V, T, S, P)
– V 는 변수라 불리는 유한 집합의 객체 variables
– T 는 단말심볼이라 불리는 유한 집합의 객체 terminal
symbols
– S 는 시작변수라 불리는 V의 특별한 원소 start variable
– P 는 생성규칙들의 유한 집합 productions
문법
• 문법의 핵심은 생성규칙들
x -> y
– x는 (V U T)+의 원소
– y는 (V U T)*의 원소
Automata
Input file
Storage
Control unit
Output
Automata
• 결정적 오토마타Deterministic automata
• 비결정적 오토마타Nondeterministic automata
• 인식기Accepter
• 변환기Transducer
응용(1/2)
• Pascal의 식별자 => 언어
– 영문자로 시작
– 뒤이어 임의의 개수의 영문자나 숫자의 문자열의
집합
• 식별자를 위한 문법
<id> -> <letter><rest>
<rest> -> <letter><rest>|<digit><rest>|
<letter> -> a|b|…|z
<digit> -> 0|1|…|9
응용(2/2)
• 식별자 a0를 유도하는 과정
<id> => <letter><rest>
=> a <rest>
=> a <digit><rest>
=> a 0 <rest>
=> a 0
유한 오토마타
Finite Automata
Automata
Input file
Storage
Control unit
Output
Automata
• 결정적오토마타Deterministic automata
• 비결정적오토마타Nondeterministic automata
• 인식기Accepter
• 변환기Transducer
결정적 유한 인식기
연산 과정이 결정적으로 진행되는
유한 인식기
결정적유한인식기
Definition2.1
• M = (Q, , , q0, F)
– Q : 내부상태들의 유한집합
–  : 문자들의 유한집합이며, 입력 알파벳이라불림
– : Q    Q 전체 함수이며, 전이 함수라 불림
– q0Q : 초기 상태
– F  Q : 종료 상태의 집합
결정적 유한 인식기 동작방식
• 오토마타의 초기 상태 : q0
• 입력 방법 : aabbaa
• 오토마타의 종료 : 입력의 맨 끝에 도달한
경우
• 승인여부 확인 : 오토마타의 종료 시점에
오토마타의 상태 체크
• 상태전이 : 전이 함수  에 따라 결정
전이그래프
• 유한 오토마타를 가시적으로 표현하기
위한 그래프
– 정점 : 오토마타의 상태
– 간선 : 오토마타에서 상태의 전이
q0
1
– 정점의 라벨 : 상태의 이름
– 간선의 라벨 : 입력 심볼의 현재 값
– 종료상태 : 이중원으로 표시
qf
전이그래프
• (q0,a) = q1
q0
초기상태표시
q1
a
그림 2.1
0
0
1
0
q0
q1
1
q2
1
확장 전이함수
• *: Q  *  Q : 함수의 두 번째 인수가 단일
심볼이 아닌 문자열임
– 함수가 (q0,a) = q1 이고 (q1,b) = q2 이면
– *(q0,ab) = q2
• *(q, ) = q,
• *(q, wa) = (*(q,w),a)
언어와 Dfa
• 정의 2.2
– 인식(Acceptance)
• Dfa M = (Q, , , q0, F)에 의해서 인식되는 언어란 M에 대한 모
든 문자열들의 집합
• L(M) = {w*: *(q0, w)  F}
– 비인식(Nonacceptance)
• Dfa가 비종료 상태에서 종료
• L(M) = { w  * : *(q0, w)  F}
오토마타의 가시화 => 그래프
그래프 : 전이함수 의 형식적인 논
증 사용 <= 정당함을 확신할 수 있
는 방법이 필요함
정리 2.1
• M = (Q, , , q0, F) : 결정적 유한 인식기
• GM : 전이 그래프
• 모든 qi, qjQ와 w +에 대해, *(q0, w)
= qj 이고 오직 그럴때에만 그래프 GM에
는 라벨 w를 갖는 qi부터 qj까지의 보행이
존재한다.
증명
• 가정 : 길이가 n 이하인 모든 문자열 v에 대해서 참이다.
• 귀납단계 : 길이가 n+1인 문자열 w를 고려하자, w는 다음과 같이
표현될 수 있다.
– w=va
*(qi, v)= qk라고 가정해 보자. 그러면 |v| =n 이므로 GM에는 라벨 v
를 갖는 qi부터 qk까지의 보행이 존재하여야 한다. 이때 *(qi, w)=
qj라면 오토마타 M은 전이 (qk, a)= qj 를 가져야 하며, 따라서 GM
은 라벨 a를 갖는 간선 (qk, qj)를 갖게 된다. 결국, GM에는 qi와 qj사
이에 라벨 va=w를 갖는 보행이 존재한다. 이 결과는 n=1일때 명확
히 성립하므로, 귀납법에 따라 모든 w + 에 대해 *(qi, w)= qj라
는 사실이 GM 에 라벨 w를 갖는 qi부터 qj까지의 보행이 존재한다
는 것을 의미한다.
언어군
• 유한오토마타
– 특정 언어를 인식
– 언어군 : 모든 가능한 유한 오토마타의 언어
집합
=> 정규 언어
정규언어
정의 2.3
• 언어 L에 대하여 L = L(M)을 만족하는 결
정적 유한 인식기 M이 존재하고 오직 그
럴때만 L을 정규언어라 부른다.
예제 2.5
• 언어
L = {awa: w  {a, b}* } 이 정규언어임을
보여라.
=> 언어에 대한 dfa를 찾는다.
Figure 2.6
a
b
b
a
q0
q2
q3
a
b
q1
a ,b
Example
사람 M
사람
늑대 W
늑대
양
G
양배추 C
양
양배추
Diagram
g
MWGC-
g
w
사람 M
C-MWG
g
g
g
c
MG-WC
c
g
MGC-W
양배추 C
c
W-MGC
g
G
-MWGC
MWC-G
w
늑대 W
양
m
m
WC-MG
m
m
g
MWG-C
c
w
w
G-MWC
Simulation for DFA
S := q0;
c := nextchar;
while c  eof do
s := move(s,c)
c := nextchar
end;
if s is in F then
return ‘Yes’
else return ‘No’
비결정적 유한오토마타
Nondeterministic Finite
Automata
비결정성
?
컴퓨터 => 결정성
비결정적 인식기
• 각 상황에서 유일한 이동만을 규정하기
보다는 가능한 여러 가지 이동들의 집합
을 허용하는 것.
• 오토마타의 전이 함수가 상태들의 집합
을 치역으로 갖게 함으로써 가능해진다.
비결정적 인식기
F
domain
:
S1
S2
range
a
a
a
S1
S2
정의 2.4
• 비결정적 유한 인식기 또는 NFA는 다음과 같
이 5 원소 쌍으로 정의 된다.
M = (Q, , , q0, F),
여기서 Q, , , q0, F 는 결정적 유한 인식기에
서와 같이 정의되나, 함수
: Q  (  {})  2Q
DFA와 NFA의 차이점
• 치역
– NFA에서 의 치역이 멱집합 2Q 내에 있고, 그 값이
Q의 단일 원소가 아닌 Q의 부분집합
• NFA에서 전이함수의 인수로 허용
– 입력 심볼을 읽지 않고도 전이가 가능함
• NFA에서는 집합 (qi, a)가 공집합을 허용
– 특정 상황에 대하여 정의된 전이가 없을 수 있음
그림 2.8
a
q1
q2
a
q0
a
q4
a
a
q5
a
q3
NFA의  함수
input
state
q0
0
{q0, q3}
1
{q0, q1}
q1

{q2}
q2
{q2}
{q2}
q3
{q4}

q4
{q4}
{q4}
그림 2.9
0
q0
1
0,1
q1
q2

정의 2.5
• 확장전이 함수
– 전이그래프에서 qi로부터 qj로의 보행이 존
재
• * (qi, w)가 qj 를 포함
– 모든 qi, qj  Q와 w  * 에 대해서도 성립

q0
a
• *(q1, a), *(q2, )
• *(q1, a) = {q0, q1, q2}
• *(q2, ) = {q0, q2}
• *(q2, aa), *(q0, a)
q1

q2
Definition 2.6
• nfa M = (Q, , , q0, F) 에 의해서 인식되는
언어 L은 승인되는 문자열들의 집합으로
다음과 같이 정의된다.
L(M) = {w  *: *(q0, w)  F  }.
즉, 이 언어는 전이 그래프의 초기 정점에
서 종료 정점까지 라벨이 w인 보행이 존재
하는 모든 문자열 w들로 구성된다.
Why Nondeterminism?
• 게임 프로그램
– 한 시점에서 여러가지 가능한 해들이 존재
– 최적의 해를 찾는 방법
• 모든 가능한 해들을 수행해보고 그 결과 중 최적을 찾음
• Backtracking 등의 기법을 이용
• Nondeterminism은 이러한 문제를 쉽게 풀수 있
도록 도와줄 수 있다.
• Nondeterminism은 복잡한 언어를 간결하게 기
술하기에 매우 적합한 방법이다.
결정적 유한 인식기와 비결정
적 유한 인식기의 동치성
동치
• 정의 2.7
L(M1)=L(M2)
즉, 두 오토마타가 같은 언어를 인식하는 경
우 두 개의 유한 인식기 M1과 M2는 동치라
한다.
{(10)n : n >= 0}
0
q0
0,1
q2
q1
1

0,1
0
q0
1
q1
1
0
q2
인식
• DFA는 NFA의 한 제한된 종류이다.
– DFA에 의해 인식되는 언어는 어떤 NFA에
의해서도 인식될 수 있다.
– DFA
인식
???
NFA
– DFA
인식
존재
NFA
– NFA가 문자열 w를 읽은후 그 NFA가 정확히
어느 상태에 있는지 알수 없다 그러나 NFA
가 놓여질 수 있는 가능한 상태들의 집합은
Non-terminal임을 알 수 있다.
– 동치인 DFA는 같은 문자열을 읽어들인 후
명확히 한 상태에 놓이게 된다.
예제 2.12
• 다음 NFA와 동치인 DFA를 구성
b
q0
a
q1

q2
a
=> DFA의 각 상태의 라벨이 NFA의 상태들의 집
합이 되도록 각 상태에 라벨을 부여
b
q0
a
q1

q2
a
DFA의 전이
•
•
•
•
({q0},a)={q1,q2}
({q0},b)=
({q1,q2},a)={q1,q2}
({q1,q2},b)={q0}
정리 2.2
• 언어 L이 비결정적 유한 인식기
MN = (QN, , N, q0, FN)
에 의해 인식되는 언어라고 하면, 다음을
만족하는 결정적 유한 인식기
MD = (QD, , D, q0, FD)
가 항상 존재한다.
L=L(MD)
1. 정점 {q0}를 갖는 그래프 GD를 생성.
이 정점을 초기 정점으로 한다.
2. 모든 간선이 생성될 때까지 반복
–
–
–
–
–
의 어떤 원소 a  에 대해서 진출 간선을 갖지
않는 GD의 정점 {qi,qj,…,qk}를 선택
*(qi,a), *(qj,a),…, *(qk,a)들을 계산
계산된 *들의 합집합을 구하여 이를 {ql,qm,…,qn}
라함
GD에 라벨이 {ql,qm,…,qn}인 정점이 존재 않는다
면 이를 추가함
GD에 정점 {qi,qj,…,qk}로부터 정점{ql,qm,…,qn}으
로 향하는 간선을 추가하고 이에 라벨 a를 부여
3. GD의 상태들 중 라벨이 qf  FN을 포함하
는 모든 상태들을 종료 상태로 지정
4. 인식기 MN이 를 인식하는 경우, GD의
정점 {q0}를 종료 정점으로 지정
예제 2.13
0
q0
1
0,1
q1
0,1
q2
0
q0
1
0,1
q1
0,1
q2
1. {q0} 추가
2. *({q0},0)를 구함 => {q0,q1}
•
•
{q0,q1}추가
{q0}에서 {q0,q1}로 향하는 라벨 0을 갖는 간선 추가
3. *({q0},1)를 구함 => {q1}
•
•
{q1}추가
{q0}에서 {q1}로 향하는 라벨 1을 갖는 간선 추가
4. *({q0},0)U*({q1},0)를 구함=>{q0,q1,q2}
•
•
{q0,q1,q2}추가
{q0,q1}에서 {q0,q1,q2} 로 향하는 라벨 0을 갖는 간선 추가
0
q0
1
0,1
q1
0,1
q2
5. *({q0},1)U*({q1},1)를 구함=>{q1,q2}
•
•
{q1,q2}추가
{q0,q1}에서 {q1,q2} 로 향하는 라벨 1을 갖는 간선 추가
6. *({q0},0)U*({q1},0)U*({q2},0)를 구함
=>{q0,q1,q2}
•
•
{q0,q1,q2}존재
{q0,q1,q2}에서 {q0,q1,q2}로 향하는 라벨 0을 갖는 간선 추가
7. *({q0},1)U*({q1},1)U*({q2},1)를 구함
=>{q1,q2}
•
•
{q1,q2}존재
{q0,q1,q2}에서 {q1,q2}로 향하는 라벨 1을 갖는 간선 추가
0
q0
1
0,1
q1
0,1
8. *({q1},0)를 구함=>{q2}
•
•
{q2}추가
{q1}에서 {q2} 로 향하는 라벨 0을 갖는 간선 추가
9. *({q1},1)를 구함=>{q2}
•
•
{q2}존재
{q1}에서 {q2} 로 향하는 라벨 1을 갖는 간선 추가
10. *({q1},0)U*({q2},0)를 구함=>{q2}
•
•
{q2}존재
{q1,q2}에서 {q2}로 향하는 라벨 0을 갖는 간선 추가
q2
0
q0
1
0,1
q1
0,1
11. *({q1},1)U*({q2},1)를 구함=>{q2}
•
•
{q2}존재
{q1,q2}에서 {q2}로 향하는 라벨 1을 갖는 간선 추가
12. *({q2},0)를 구함=>{}
•
{}추가
•
{q2}에서 {} 로 향하는 라벨 0을 갖는 간선 추가
13. *({q2},1)를 구함=>{q2}
•
{q2}존재
•
{q2}에서 {q2} 로 향하는 라벨 1을 갖는 간선 추가
q2
0
q0
1
0,1
q1
0,1
q2
• q1을 포함한 모든 상태들을 종료 상태로
지정
• 정점 {q0}를 종료 정점으로 지정할지 판
단
그림 2.16
0
{q0}
1
{q1}
{q0,q1}
0
{q0,q1,q2}
0,1
1
1
{q1,q2}
0,1
{q2}
0
0

0,1
1
정규언어와 정규문법
Regular Languages and
Regular Grammars
정규언어
• 임의의 언어 -> 정규 언어
– 이를 인식하는 유한 인식기의 존재여부
• DFA 나 NFA 가 존재해야 함
• 정규언어를 표현하는 보다 정교한 방법
이 필요함 => 정규표현
Relation of RG, RE, Automata
Regular Expression
Finite Automata
Regular Grammars
정규표현
• 정규언어를 기술하는 한가지 방법이 정규표현
regular expressions 이다.
• 표기
– 알파벳 의 문자열, ( )
– 연산자 +,
. , *의 결합
• 예) 언어 {a} => 정규표현 a
언어 {a, b, c} => 정규표현 a+b+c
정규표현
• + : 합집합UNION
• . : 접합CONCATENATION
• * : 스타폐포STAR-CLOSURE
• (a + b  c) *
• {a}  {bc}
• {, a, bc, aa, abc, bca, bcbc, aaa, aabc, …}
정의 3.1
•  를 주어진 알파벳이라고 하면 정규표현은
1. , , and a  는 모두 regular expressions 이다. 이
들을 기본 정규표현 primitive regular expressions이라
한다.
2. r1과 r2가 정규표현이면, r1+r2, r1. r2, r1*, 과 (r1) 는 모
두 정규표현이 된다.
3. 특정 문자열이 정규표현이 되기 위해서는 기본 정
규 표현에서 시작하여 위 규칙 (2)를 유한횟수만큼
반복함으로써 그 문자열이 유도될 수 있어야 한다.
정의 3.2
• 정규표현 r에 의해 묘사되는 언어 L(r)은
다음 규칙들에 의해 정의된다.
1.  은 공집합을 나타내는 정규 표현이다.
2.  는 {}를 나타내는 정규 표현이다.
3. 모든 a   에 대해 a는{a}를 나타내는 정규
표현이다.
정의 3.2
• 만약 r1과 r2가 정규 표현일 경우
4. L( r1+ r2) = L(r1)  L(r2),
5. L(r1 . r2) = L(r1)L(r2),
6. L((r1)) = L(r1),
7. L(r1*) = (L(r1))*.
정규표현과 정규언어의 관계
• 정리 3.1
r 을 정규 표현이라 하자. 언어 L(r) 을 인식하
는 nfa가 존재하며, 결과적으로 L(r)은 정규
언어이다.
그림 3.1
. nfa accepts 
. nfa accepts {}
. nfa accepts {a}
q1
q0
q0
q0

q1
a
q1
그림 3.2
. L(r)을 인식하는 nfa의 도식적인 표현
M(r)
그림 3.3
Automaton for L(r1 + r2).
M(r1)



M(r2)

그림 3.4
. Automaton for L(r1r2).

M(r1)

M(r2)

그림 3.5
Automaton for L(r1*).

M(r)



그림 3.6
Find an nfa which accepts L(r), where r = (a + bb)*(ba* + ).
. M1 accepts L(a+bb)
a
b
. M2 accepts L(ba* + )
M1
b
M2
a

b

그림 3.7
Automaton accepts L((a + bb)*(ba* + ))


M1
a
b
b
M2




b
a


정규언어와 정규문법
• NFA에 대한 정규 표현 찾는 방법
NFA의 모든 보행에 대한 라벨 생성
어렵다
전이그래프에 사이클 존재 -> 몇번 반복할
지 모름
기록 문제로 해결
정규언어에 대한 정규표현
• 일반전이 그래프Generalized transition graph
– 간선의 라벨에 정규 표현을 부여하는 전이 그래프
– 라벨은 여러 정규표현들의 접합 <= 그 자체도 정규
표현이 된다.
– a -> a
– a, b -> a + b
예제 3.8
L(a* + a*(a + b)c*)
a
c*
a+b
그림 3.9
e
d
qi
c
qj
q
b
a
ce*b
ae*d
ce*d
qj
qi
ae*b
그림 3.12
a
EE
OE
a
b
b
b
b
a
OO
EO
a
그림 3.12
aa
bb
ba
a
EE
OO
EE
OE
ab
a
b
b
b
b
b
a
a
b
a
OO
EO
a
EO
그림 3.12
aa
bb
ba
OO
EE
aa+ab(bb)*ba
ab
b
a(bb)*a
b+a(bb*)ba
a
a
b
EO
EE
b+ab(bb*)a
EO
정규언어 묘사방법
• NFA
• DFA
• 정규표현
• 간단한 문법을 이용 => 정규문법
Relation of RG, RE, Automata
Regular Expression
Finite Automata
Regular Grammars
정규문법
우선형 문법과 좌선형 문법
문법
• 문법 G 는 다음의 항으로 정의된다
G = (V, T, S, P)
– V 는 변수라 불리는 유한 집합의 객체 variables
– T 는 단말심볼이라 불리는 유한 집합의 객체
terminal symbols
– S 는 시작변수라 불리는 V의 특별한 원소 start
variable
– P 는 생성규칙들의 유한 집합 productions
정의 3.3
문법 G = (V, T, S, P)에서 모든 생성규칙들이 다음
의 형태를 갖는 경우 이를 우선형 right-linear문법
이라 한다.
A -> xB, A -> x,
여기서 A, B V 이고 x  T*이다.
문법의 생성규칙들이 모두 다음의 형태를 갖는 경
우 이 문법을 좌선형 left-linear 문법이라 한다.
A -> Bx, A -> x.
정규문법은 우선형 문법이거나 좌선형 문법이다.
예제 3.12
• 우선형 문법Right-linear
문법 G1 = ({S}, {a,b}, S, P1)에서 생성규
칙 P1이 다음과 같이 주어졌다면
S -> abS | a
r = (ab)*a
예제 3.12
• 좌선형 문법Left-linear
문법 G2 =({S, S1, S2}, {a,b}, S,P2) 에서 생성
규칙 P2가 다음과 같이 주어졌다면
S -> S1ab,
S1 -> S1ab | S2,
S2 -> a
r = (a(ab)*)
예제 3.13
• 문법 G = ({S,A,B}, {a,b}, S, P)가 다음과 같은
생성규칙들을 갖는 경우 이는 정규 문법이 아
니다.
S -> A,
A -> aB|,
B -> Ab
• 선형문법 linear grammar은 각 생성규칙의 우
변에 하나 이하의 변수만 있을 수 있으며, 이 변
수의 위치에는 제한이 없는 문법을 말한다.
• 정규문법
선형문법
우선형 문법에 대한 정규언어
우선형 문법 => 정규언어
정규언어 => nfa
정리 3.3
• G = (V,T,S,P) 가 우선형 문법 right-linear
grammar 이면 L(G)는 정규 언어이다.
• 증명
– V={V1,V2,…}
– S=V0
– 생성규칙 : V0->v1Vi, Vi->v2Vj,…
정리 3.3
• 문자열 w가 L(G)에 속한다면 문법 G의
생성규칙들의 형태로 볼때 그 유도과정
은 다음과 같을 것이다
V0 => v1Vi
=> v1v2Vj
=> v1v2…vkVn
=> v1v2…vkvl = w
그림 3.15
Vi
a1
a2
...
am
Vj
Represents Vi ->a1a2 … am Vj => *(Vi,a1a2…am) = Vj
Vi
a1
a2
...
am
Represents Vi -> a1a2 … am => *(Vi,a1a2…am) = Vf
Vf
연습문제 1
• 다음 문법에 의해 생성되는 언어를 인식
하는 유한 오토마타를 구성해 보자.
• S -> aS | aA
• A -> bA| b
• L = {anbm | n, m  1}
정규언어에 대한 우선형 문법
정규언어 => dfa
dfa => 우선형 문법
정리 3.4
• L 이 알파벳 에 대한 정규 언어일 때, L
= L(G)를 만족하는 우선형 문법 G=(v, ,
S, P)가 항상 존재한다.
정리 3.4
• 증명
언어 L을 인식하는 dfa를 M=(Q, , , q0,
F)라하고, Q={q0, q1, …, qn} 이고  =
{a1,a2,…,am}이라 가정
– dfa M으로부터 V={q0, q1, …, qn}
– S=q0
정리 3.4
– M에 존재하는 각 전이에 대해
(qi,aj)=qk
문법 G의 P에 다음과 같은 생성규칙 추가
qi -> ajqk
qk  F인 경우에는 P에 다음 생성규칙 추가
qk -> 
• w  L(G)를 보임
오토마타 M이 dfa가 아니어도
가능함
정리 3.5
• 언어 L이 정규언어이고 그럴때만 L =
L(G)인 좌선형 문법 G가 존재한다.
• 증명
– 좌선형 문법 G의 생성규칙을 통하여 우선형
문법 G’을 생성
–A->vRB
– A->Bv
A->v
A->vR
– L(G)=(L(G’))R
정리 3.6
• 언어 L이 정규언어이고 그럴때에만 L =
L(G)를 만족하는 정규문법 G가 존재한다.
Theorem 3.1
• Let r be a regular expression. Then there
exists some nondeterministic finite accepter
that accepts L(r)
• Consequently, L(r) is a regular language.
Theorem 3.2
• Let L be a regular language. Then there
exists a regular expression r such that L =
L(r)
그림 3.15
Regular expressions
Theorem 3.2
Theorem 3.1
dfa or nfa
Theorem 3.3
Theorem 3.4
Regular grammars