이전에는 R.L에 대해 다뤘고, 이번에는 그보다 더 넓은 범위인 Context-Free-Language를 다루고자 한다.
Context Free Grammer
교체규칙의 모음 (꽤 재귀적임)
예) A -> 00B (A를 00B라는 걸로 교체하시오)
이떄, 같은 variable이라면 이렇게 연결해서 쓸 수 있다
A->B, A->C를 A->B|C 이렇게
- variable(A, B...): 실제 다른 것으로 교체되는 부분
start variable: 시작하는 변수 (명시되있지 않으면 맨 첫줄의 왼쪽 변수) - terminal($\sum$): 변수가 아닌 alphabet
이떄, context free grammer로 생성될 수 있는 모든 문자열의 집합을 context free grammer라고 한다.
규칙
- start variable을 찾아 그 규칙부터 시작
- 변환 후 들어있는 변수를 왼쪽으로 두는 규칙을 아무거나 적용
- 어떤 변수도 남아있지 않을 때까지 반복
- 예) 규칙이 다음과 같을 때 해당 grammer로아무거나 만들어보셈
S -> 0S1T ...(1)
T -> SS ...(2)
S -> @ ...(3)
일단 시작인 S에서 시작해
S => 0S1T (1 적용)
=> 0S1SS (2 적용)
=> 0@1SS (3 적용)
=> 0@1@S (3 적용)
=> 0@1@@ (3 적용)
변수가 남지 않았으므로, 해당 문법으로 0@1@@을 만들 수 있다.
parse tree
grammer에서 derivation을 통해 만든 string을 보여주는 그림
terminal은 아래에, 변수는 위쪽에...
아까 예시를 parse tree로 만들면 다음과 같다.

수학적 정의
정의 $(V, \sum, R, S)$
- V: variable의 유한집합
- $\sum$: 변수가 아닌 문자의 유한집합
$V\cap \sum = \emptyset$ - R: rule의 집합
R: $V \rightarrow V\cup \sum$ - S: start variable
$S \in V$
근데 단순히 rule만 늘어놓아도 V, $\sum$, S는 확정할 수도 있다.
반응형
'CS > 계산이론' 카테고리의 다른 글
| [계산이론](14)[pushdown automata] (0) | 2025.10.16 |
|---|---|
| [계산이론](13)[CFG 디자인] (0) | 2025.10.15 |
| [계산이론](11)[pumping lemma로 nonregular 증명] (0) | 2025.10.13 |
| [계산이론](10)[pumping lemma] (0) | 2025.10.10 |
| [계산이론](9)[GNFA, R.E -> R.L] (0) | 2025.10.09 |