정규표현식 매칭을 위한 연산 의미론과 가상 머신 설계

정규표현식 매칭을 위한 연산 의미론과 가상 머신 설계
안내: 본 포스트의 한글 요약 및 분석 리포트는 AI 기술을 통해 자동 생성되었습니다. 정보의 정확성을 위해 하단의 [원본 논문 뷰어] 또는 ArXiv 원문을 반드시 참조하시기 바랍니다.

초록

이 논문은 정규표현식 매처를 추상적인 빅스텝 의미론에서 시작해, 연속성(continuation)을 도입한 작은 단계(EKW) 머신, 포인터 기반 힙(PWπ) 머신, 그리고 Thompson의 락스텝 구조를 재구성한 순차·병렬 가상 머신까지 단계별로 구체화한다. 마지막으로 GPU(CUDA) 구현을 통해 병렬 매칭의 실험 결과를 제시한다.

상세 분석

논문은 정규표현식 매칭을 “입력 문자열이 표현식에 의해 도출되는가”라는 관계 e ↓ w 로 정의하고, 이를 빅스텝 의미론으로 기술한다. 빅스텝은 비결정성을 내포하지만 실제 매처는 입력을 순차적으로 소비하면서 탐색한다는 점을 강조한다. 이를 위해 저자는 먼저 EKW 머신을 제안한다. EKW는 현재 탐색 중인 표현식 e, 남은 연속성 스택 k, 그리고 아직 읽지 않은 입력 w 로 구성된 구성(configuration) ⟨e;k;w⟩ 형태를 갖는다. 전이 규칙은 전통적인 SECD 스타일로, 합(·)·별표(*)·옵션(|) 등을 스택에 푸시·팝하거나, 문자 매칭 시 입력을 한 글자 소모한다. 비결정적 분기에서는 두 갈래 중 하나가 성공하면 전체가 성공한다. 그러나 이 설계는 무한 루프에 빠질 위험이 있다. 예를 들어 a** 와 같은 표현식에 a 문자가 뒤따를 때, 스택을 반복적으로 재구성하면서 종료 조건에 도달하지 못한다.

이 문제를 해결하기 위해 저자는 표현식을 메모리 상의 힙에 포인터 구조로 저장하는 PWπ 머신을 도입한다. 힙 π는 주소→값(연산자와 자식 포인터) 매핑이며, 각 노드에는 “continuation” 포인터가 별도로 정의된다. 포인터 동등성(주소 동일성) 검사를 통해 동일한 서브트리를 재방문하는 것을 감지하고, 이미 방문한 노드는 다시 탐색하지 않음으로써 중복 연산을 차단한다. PWπ 전이는 두 종류로 나뉜다. ① p → q 전이는 입력을 소비하지 않고 트리 구조를 따라 이동하고, ② p a → q 전이는 현재 노드가 문자 a 와 일치할 때 입력을 한 글자 소모하며 다음 노드 q 로 이동한다. 수용 상태는 포인터가 null 이고 입력이 빈 문자열일 때이다.

PWπ와 EKW 사이의 동등성 정리는 두 머신이 서로의 전이를 시뮬레이션할 수 있음을 보이며, 특히 스택 k 는 포인터 체인 cont 을 따라 재구성될 수 있음을 증명한다. 이 기반 위에 저자는 “락스텝”(lockstep) 구성을 정의한다. 여기서는 포인터 집합 S 를 한 번에 ε-클로저(π의 ε 전이)와 문자 전이로 확장하는 매크로 단계 S ⇒ S′ 를 도입한다. 이 매크로 단계는 전통적인 NFA의 ε-클로저와 동일한 역할을 하지만, 포인터 집합을 이용해 중복을 자연스럽게 제거한다.

다음으로 논문은 순차적 락스텝 머신을 설계한다. 두 리스트 c (현재 매크로 단계에서 확장 중인 포인터)와 n (다음 매크로 단계로 넘길 포인터)를 유지하고, 추가 리스트 t 를 통해 이미 방문한 포인터를 기록한다. 보조 함수 ψ(p,l₁,l₂) 는 포인터 p 가 리스트 l₁ 또는 l₂ 에 존재하면 무시하고, 없으면 l₁ 앞에 삽입한다. 이 메커니즘은 중복 탐색을 O(1) 평균 시간으로 차단한다.

마지막으로 저자는 병렬 락스텝 머신을 제시한다. 포인터 집합 S 를 여러 스레드가 동시에 처리하도록 프로세스 알제브라(Pi‑calculus) 기반의 전이 규칙을 정의한다. 각 스레드는 독립적으로 p → q 또는 p a → q 전이를 수행하고, 결과 집합은 동기화된 합집합 연산으로 결합된다. 이 설계는 GPU와 같은 대규모 코어 환경에 적합하며, CUDA 구현을 통해 실험을 수행한다. 실험 결과는 전통적인 백트래킹 매처에 비해 메모리 사용량은 비슷하지만, 특히 별표(*)와 같은 비결정적 연산이 많은 패턴에서 실행 시간이 크게 단축됨을 보여준다.

전체적으로 논문은 정규표현식 매칭을 가상 머신 관점에서 체계적으로 모델링하고, 포인터 기반 중복 제거와 락스텝 매크로 단계라는 두 핵심 아이디어를 통해 순차·병렬 구현 모두에서 효율성을 확보한다는 점에서 의미가 크다.


댓글 및 학술 토론

Loading comments...

의견 남기기