1. 정규 표현식 (Regular Expressions, RE)
정규 표현식 (RE)
정규 언어를 표현하는 방법은 크게 세 가지(문법, 오토마타, 정규 표현식)가 있다. 그중 RE는 가장 선언적(Declarative)이고 직관적인 방법으로, 복잡한 언어의 패턴을 수학적 수식처럼 간결하게 묘사할 수 있다
1.1 정규 표현식의 재귀적 정의
어떤 알파벳 에 대해 다음 규칙을 만족하는 문자열만을 정규 표현식이라고 부른다. 특정 문자열이 RE가 되려면 반드시 아래의 기본 표현에서 시작해 유한 번의 규칙 적용을 거쳐 유도되어야 한다
- 기본 정규 표현 (Primitive RE):
- : 공집합 (아무 문자열도 포함하지 않음)
- : 공스트링 (빈 문자열)
- : 알파벳 집합에 속한 각각의 기호
- 재귀적 규칙 (Recursive Rules):
- 합집합 (Union): (또는 )
- 결합 (Concatenation): (또는 점을 생략하여 )
- 클레이니 스타 (Kleene Star): (0번 이상 반복)
- 괄호 (Parentheses): (연산 우선순위 지정)
1.2 RE의 성질 및 연산 우선순위
수학의 사칙연산처럼 RE에도 연산 순서와 대수적 성질이 존재한다
연산 우선순위
- 클레이니 스타 (): 가장 높음
- 결합 (): 중간
- 합집합 (): 가장 낮음 (예시: 식에서는 가 제일 먼저 묶이고, 그 다음 와 더해진 후, 마지막에 스타 연산이 적용된다)
주요 성질 및 항등원 정규 표현식은 집합 연산을 기반으로 하므로 다음과 같은 성질을 가진다
- 항등원 (Identity): * (공집합을 더해도 그대로)
- (빈 문자열을 결합해도 그대로)
- 공집합과의 결합 (Annihilator): * (어떤 문자열과도 결합할 수 없게 되므로 결과는 공집합)
- 분배 법칙 (Distributive Law): *
2. RE에서 NFA로의 변환
톰슨의 구성법 (Thompson's Construction)
정규 표현식은 입력과 출력을 가진 박스(Box) 형태의 NFA 조각들을 재귀적으로 조립하여 시각화할 수 있다.

- 1. 합집합 (): 병렬 연결 새로운 시작 상태에서 두 박스(와 )로 향하는 -전이를 갈라지게 하여 병렬로 연결한다

- 2. 결합 (): 직렬 연결 박스의 출구를 박스의 입구와 -전이로 직렬 연결한다

- 3. 클레이니 스타 (): 반복 루프 생성
- 박스의 끝(출구)에서 다시 입구로 돌아가는 -전이 추가(1회 이상 반복 처리)
- 박스의 시작에서 끝으로 아예 건너뛰는 -전이 추가(0회 반복 허용 처리)

3. NFA를 정규 표현식으로 변환
NFA, DFA, RE는 모두 표현 능력이 동일하다. 이를 증명하기 위해 오토마타를 다시 수식(RE)으로 되돌리는 방법이 존재한다
3.1 GTG (Generalized Transition Graph)
NFA에서 정규 표현식을 유도하기 위해 사용하는 확장된 형태의 그래프 모델이다
- 특징: 일반적인 NFA는 전이 레이블로 단일 심볼()이나 만을 사용하지만, GTG는 전이 레이블 자체에 정규 표현식(RE) 전체를 적을 수 있다
- 상태 간 전이: 만약 두 상태 사이에 직접적인 연결 경로가 없다면 레이블을 으로 두어, 논리적으로는 모든 상태가 서로 연결된 것으로 간주한다
3.2 상태 제거법 (State Elimination Method)
복잡한 GTG에서 상태를 하나씩 지워나가며(우회 경로를 수식으로 병합하며) 최종적으로 정규 표현식을 찾아내는 핵심 알고리즘이다
단계별 제거 과정
- 중간 상태 선택: 시작 상태()와 최종 수락 상태()가 아닌 중간 상태 를 하나 선택하여 제거한다
- 경로 업데이트 (핵심): 를 거쳐 가는 우회 경로를 RE 연산으로 묶어 기존 경로에 더해준다
- 만약 상태 에서 로 가는 기존 경로 레이블이 였다면, 를 지우면서 다음과 같이 업데이트된다
- (해석: 기존에 바로 가던 길 + 로 들어가서 자기 루프를 돌고 다시 로 나오는 길)
- 반복: 상태가 오직 시작 상태와 최종 상태 단 2개만 남을 때까지 위 과정을 반복한다 ㄹ 2-State GTG 공식 (최종 산출) 상태가 단 두 개(시작 상태와 수락 상태)만 남았을 때, 최종 정규 표현식 은 다음과 같이 정리된다
- : 시작 상태에서의 자기 루프 (Self-loop)
- : 시작 상태 최종 상태 전이
- : 최종 상태 시작 상태로 돌아오는 전이
- : 최종 상태에서의 자기 루프
변환 시 유용한 축약 공식
경로를 합치다 보면 수식이 지저분해질 수 있습니다. 다음 공식을 활용해 간소화하라
- (없는 경로는 더해도 무시)
- (끊긴 경로와 결합하면 그 길도 끊어짐)
- (아무것도 없는 것을 0번 이상 반복하면 빈 문자열만 나옴)
변환 예제
조건: 는 짝수 개, 는 홀수 개 포함하는 문자열을 인식하는 NFA
