정규 표현식

정규 언어를 표현하는 방법은 크게 세 가지(Grammar, Automata, RE)가 있으며, 그중 RE는 가장 선언적(Declarative)이고 직관적인 방법으로, 복잡한 언어의 패턴을 간결하게 묘사할 수 있다

정규 표현식의 재귀적 정의 알파벳 에 대해 다음 규칙을 만족하는 문자열을 정규 표현식이라 한다

  • 기본 정규 표현 (Primitive RE):
    • : 공집합
    • : 공 문자열
    • : 각 알파벳 심볼
  • 재귀적 규칙 (Recursive Rules):
    • 합집합 (Union):
    • 결합 (Concatenation): (또는 )
    • 클레이니 스타 (Kleene Star):
    • 괄호 (Parentheses):
  • 특정 문자열이 RE가 되려면 반드시 위 기본 표현에서 시작해 유한 번의 규칙 적용을 거쳐 유도되어야 한다

RE의 성질 및 연산 우선 순위

수학의 사칙연산처럼 RE에도 연산 순서와 대수적 성질이 존재한다

연산 우선순위

  • 클레이니 스타 (): 가장 높음
  • 결합 (): 중간
  • 합집합 (): 가장 낮음
  • 예시: 에서 가 먼저 계산된 후 연산이 이루어진다

주요 성질 및 항등원

  • 항등원 (Identity): *
  • 공집합과의 결합: (어떤 문자열도 유도할 수 없게 됨)
  • 분배 법칙 (Distributive Law):

RE에서 NFA로의 변환

정규 표현식은 박스(Box) 형태의 NFA 조각들을 조립하여 시각화할 수 있다

기본 변환 규칙

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

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

  • 클레이니 스타 (): * 박스의 끝에서 입구로 돌아가는 전이 추가 (반복)
    • 시작에서 끝으로 바로 가는 전이 추가 (0회 반복 허용)

NFA를 정규 표현식으로 변환

GTG (Generalized Transition Graph)

NFA에서 정규 표현식을 유도하기 위해 사용하는 확장된 형태의 그래프이다

특징: 일반적인 NFA는 전이 레이블로 심볼()이나 를 사용하지만, GTG는 전이 레이블로 정규 표현식(RE) 자체를 가질 수 있다

상태 간 전이: 만약 두 상태 사이에 직접적인 길이 없다면 을 추가하여 모든 상태가 연결된 것으로 간주한다

의의: 모든 NFA는 GTG로 변환 가능하며, 이를 통해 최종적으로 RE를 추출할 수 있습니다. 이는 NFA, DFA, RE의 표현 능력이 동일함을 증명하는 근거가 된다

상태 제거법

복잡한 오토마타를 단순화하여 정규 표현식을 찾아내는 핵심 알고리즘이다

기본 원리 (2-State GTG 공식) 상태가 두 개()만 남았을 때, 시작 상태에서 최종 상태로 가는 전체 정규 표현식 은 다음과 같이 정의된다

  • : 시작 상태에서의 자기 루프(Self-loop)
  • : 시작 상태에서 최종 상태로 가는 전이
  • : 최종 상태에서 시작 상태로 돌아오는 전이
  • : 최종 상태에서의 자기 루프

단계별 제거 과정(3개 이상의 상태)

  • 중간 상태 선택: 시작 상태()와 최종 상태()가 아닌 중간 상태 를 선택한다
  • 경로 업데이트: 를 거쳐가는 모든 경로를 RE 결합 연산으로 대체하여 남은 상태들 사이의 전이를 업데이트한다
    • 예를 들어, 경로가 있다면 새로운 전이는 가 된다
  • 반복: 상태가 2개 남을 때까지 위 과정을 반복한다

유용한 공식

예제: 는 짝수, 는 홀수