프로그래밍 언어도 형식언어라 할 수 있다.
Basic definitions
1) alphabet : symbol들의 유한집합이다.
꼭 한 문자는 아니다.
2) string(or sentence, word)
3) length
4) empty string
5) T*는 T 집합의 모든 가능한 경우의 string의 집합이다.
T = {a, b}
T*= {a와 b로 이루어진 모든 string} = {aa, ab, ba, bb, }
T+(dagger) =T*-
6) Language(L) : T*의 부분집합이면서 문법G의 규칙을 따라야한다.
T = {a, b}
L = {aa, bb, ba, bb} = { w | |w| = 2, w T*}


L 집합도 집합 연산이 가능하다.

Vn = nonterminal symbols
Vt = terminal symbols
P = production rules
a b : 왼쪽이 오른쪽을 생성해낸다.
이때 a는 무조건 symbol이 있어야 하므로 V+의 원소이다.
S = start symbol, Vn의 원소


a $\rightarrow$ b일때 둘이 Derivation 하다 라고 한다.
언어 L은 그것을 생성하게 하는 문법 G가 존재한다.
형식언어는 문법으로 기술할수 있는 언어를 뜻한다.


