[Compiler] 2.2. Finite Automata

이상윤·2024년 4월 24일

컴파일러

목록 보기
4/7
post-thumbnail

토큰 인식을 위한 구현
정규식의 형태로 지정된 패턴을 기반으로 입력을 Accept/Reject 함

Finite Automata 정의

M={Q,Σ,δ,q0,F}M=\{Q,\Sigma,\delta,q_0,F\}
state들의 유한집합 Q={q0,q1,q2,,qi}Q=\{q_0,q_1,q_2,\dots ,q_i\}
입력 기호의 집합, 입력 알파벳 Σ\Sigma
초기 state q0q_0
최종 state FF (FQF\subset Q)
state transition function δ\delta
: δ(q0,a)=q1\delta(q_0,a)=q_1 -> q0q_0에서 aa 입력되면 q1q_1으로 transition

그래프/도표 표기


(왼쪽이 transition graph, 오른쪽이 transition table)

  • epsilon-move: input 없이 이동할 수 있는 경우이다.

DFA vs NFA

  • DFA: Deterministic Finite Automata
    (대부분) 하나의 state와 하나의 input symbol에 대해 하나의 transition만 존재.
    ε-move 금지
    빠른 실행
  • NFA: Non-deterministic Finite Automata
    하나의 state와 하나의 input symbol에 대해 여러 transition 존재 가능
    ε-move 가능
    빠른 구현

McNaughtom-Yamada-Thompson alghrithm (aka Thomson's construction)

각 부분을 구현하고, ε-move로 묶는다.

  • r1r2r_1r_2r1r2r_1 \| r_2r1r_1^*

NFA - DFA 변환

  • 용어 정의
    ϵclosure(qN)/ϵcolsure(T)\epsilon-closure(q^N) / \epsilon-colsure(T): state qNq^N 또는 집합 TT에서 ε-move로만 도달할 수 있는 state들의 집합. 자기 자신을 포함한다.

  • 방법 & 예시

  1. start state q0Nq^N_0로 부터, ϵclosure(q0N)\epsilon-closure(q^N_0) 계산
    T0=ϵclosure(A)={A,B,C}T_0 = \epsilon-closure(A) = \{A,B,C\}

  2. sΣs\in\Sigma에 대해 ϵclosure(δ(T0,s))\epsilon-closure(\delta(T_0,s)) 계산
    T1=ϵclosure(δ(T0,a))=ϵclosure(D)={D,F,G}T_1 = \epsilon-closure(\delta(T_0,a)) = \epsilon-closure(D) = \{D,F,G\}
    T2=ϵclosure(δ(T0,b))=ϵclosure(E)={E,F,G}T_2 = \epsilon-closure(\delta(T_0,b)) = \epsilon-closure(E) = \{E,F,G\}

  3. 새로운 결과가 안나올 때 까지, TiT_i에 대해 2번 과정 반복
    T3=ϵclosure(δ(T1,a))=ϵclosure(H)={H}T_3 = \epsilon-closure(\delta(T_1,a)) = \epsilon-closure(H) = \{H\}
    ϵclosure(δ(T1,b))=\epsilon-closure(\delta(T_1,b)) = \empty
    ϵclosure(δ(T2,a))={H}(=T3)\epsilon-closure(\delta(T_2,a)) = \{H\} (=T_3)
    ϵclosure(δ(T2,b))=\epsilon-closure(\delta(T_2,b)) = \empty
    ϵclosure(δ(T3,a))=\epsilon-closure(\delta(T_3,a)) = \empty
    ϵclosure(δ(T3,b))=\epsilon-closure(\delta(T_3,b)) = \empty

  4. 표 작성

  5. 내용을 바탕으로 NFA 작성

0개의 댓글