Formal Language, Grammar and Automata
2023. 9. 28. 05:14ㆍ전공/컴파일러
Theory of Computation
계산 이론
- Computability, Decidabillity, Undecidability
- 계산 가능한 함수인가?
- 함수가 종료 가능한가?
- 증명이 무엇인가?
- Languages and Automata
- 언어란 무엇인가?
- 언어를 어떻게 정의하는가?
- 언어 안의 단어를 어떻게 인식할 것인가?
- Complexity
- 공간과 시간을 너무 많이 사용하면 안 됨
- P (polynomial time)= NP(non-deterministic polynomial time)
계산 가능성, 결정 가능성, 결정불가능성
- 함수가 모든 입력에 대해 정의되는지 결정하는 것은 어려움
- 3n + 1문제
오토마타 이론(Automata theory)
- 계산 능력이 있는 추상기계와 그 기계를 이용해서 풀 수 있는 문제들을 연구
- Automaton(단수 표현) : 계산 능력이 있는 추상 기계
- 물리적인 하드웨어 필요 없음
- Automata(복수 표현)
- 컴퓨터 과학에서의 근본적인 문제
- 서로 다 유한
동기
- 인식의 관점
- 문자열 w가 언어 L에 속하면 인식
- 문자열 w가 언어 L에 속하지 않으면 인식 안됨
- 생성의 관점
- 합법적인 문자열을 생성하는 문법 정의
- 언어를 어떻게 기술하면 표현 가능한지
- 오토마타는 언어를 인식한다.
- 문법은 언어를 생성한다.
Formal Language(형식 언어)
알파벳(Alphabet)
- 알파벳 Σ
- 유한한, 비어있지 않은 기호들의 집합
문자열(Strings)
- 문자열(String or word) w
- Σ로부터 얻어지는 유한한 기호들의 순서
- 빈 문자열 ϵ (문자열의 길이 = 0)
- |w| : 문자열의 길이
- 연결
- x = abcd, y = efgh → xy = abcdefgh
- an=a...a (a의개수=n)
알파벳의 거듭제곱(Σ∗,Σ+)
- Σk : 길이가 k인 문자열 집합
- Σ∗=Σ0∪Σ1∪Σ2∪...s제
- Σ+=Σ∗−ϵ=Σ1∪Σ2∪...
언어(Language)
- 언어 L
- $\Sigma^의부분집합,L \subseteq \Sigma^$
멤버쉽 문제(Membership (recognition) problem)
- 주어진 문자열 w가 언어 L에 포함되는가 (w∈L)
Grammar
문법(Grammar)
- 합법적인 문자열을 생성하는 법칙으로 언어를 기술
- 문법 G=(VN,VT,P,S)
- VN : 유한개의 non-terminal symbols 집합
- VT : 유한개의 terminal symbols 집합
- VN∩VT=∅,VN∪VT=V
- P : 유한한 문자열 쌍의 집합, productions
- α→β,α∈V+,β∈V∗
- α : 왼쪽에 있는 것 (lhs)
- β : 오른쪽에 있는 것(rhs)
- → : 왼쪽 기호를 오른쪽 기호로 대체한다.
- S : 시작 기호(non-terminal symbol)
추가적인 문법 표기법
- Non-terminal symbols : 대문자
- Terminal symbols : 소문자
- Start symbol : S
- lhs가 같을 때 | 로 연결해서 rhs 표현
- S → A | a ( S → A, S → a)
Derivation(⇒)
- 한 문자열에서 생성 규칙을 한 번 적용해서 다른 문자열로 바꾸는 것
- ∗⇒ : 0번 이상 derivation
- +⇒ : 1번 이상 derivation
- n⇒ : a1n⇒an iff a1,a2,a3,...,an∈V∗ and a1⇒a2⇒a3⇒...⇒an
- iff : if and only if, 필요충분조건
문법 G로 생성된 언어 L
- G=(VN,VT,P,S)에 의해 생성된 언어 L(G)
- $L(G) = {w|w \in V_T^\space and\space S \overset{}\Rightarrow w}$
촘스키 계층 구조(The Chomsky Hierarchy)
Type | Grammar | Production Rules | |
0 | Unrestricted | α→β | 제약 없음 |
1 | Context-Sensitive | α→β |α|≦ |
\alpha의 길이가 \beta보다 짧아야 함 |
2 | Context-Free | \alpha \rightarrow \beta \alpha \in V_N, \beta \in V^* |
\alpha는 non-terminal symbol 하나만 올 수 있음 |
3 | Regular | \alpha \rightarrow t\beta\space |\space t (right linear) \alpha \rightarrow \beta t\space |\space t (left linear) \alpha,\beta \in V_N, t \in V^*_T |
right linear : 맨 왼쪽은 terminal symbol이어야 함 left linear : 맨 오른쪽은 terminal symbol이어야 함 |
언어와 인식기의 계층구조(Hierarchy of Languages and recognizer)
Grammar | Language | Example of Language | Recognizer |
Unrestricted | Recursively enumerable set | Turing machine | |
Context-Sensitive | Context-sensitive language | \{a^nb^nc^n | n\ge 0\} (중복매칭언어) |
Linear bounded automata |
Context-Free | Context-free language | \{a^nb^n | n\ge 0\} (단순매칭언어) |
Pushdown automata |
Regular | Regular language | \{a^mb^n | m,n\ge 0\} | Finite automata |

'전공 > 컴파일러' 카테고리의 다른 글
Lex (0) | 2023.09.28 |
---|---|
Lexical analysis (0) | 2023.09.28 |
Finite Automata (0) | 2023.09.28 |
Regular expression (0) | 2023.09.28 |
Introduction to Compiler (0) | 2023.09.28 |