(실시예 1)
도 1은 본 발명의 문자열 대조 장치를 나타내는 구성도이다.
도 1에 있어서, 문자열 대조 장치(1)는, 본 발명에 있어서의 정규 표현에 의한 문자열 대조를 행하는 장치로서, 입력 문서(6) 중에 대조 조건(2)을 만족시키는 것이 포함되는지 여부를 대조 결과(10)로서 출력한다. 대조 조건(2)은 문자열 대 조의 조건을 기술한 조건이며, 문자열 대조 장치(1)의 입력으로 된다. 상태 천이표 생성부(3)는 대조 조건(2)으로부터 상태 천이(11)와 출력 기술(12)을 생성하여, 각각 상태 천이표 저장부(4), 출력표 저장부(5)에 전달한다. 상태 천이표 저장부는 상태 천이(11)의 조를 유지한다. 출력표 저장부(5)는 출력 기술(12)을 유지한다. 입력 문서(6)는 대조의 대상으로 되는 문서이다. 입력 문자 판독부(7)는 입력 문서(6)에 포함되는 문자를 1문자씩 취출하고, 입력 문자(14)로서 SDFA 오토마톤(8)에 보낸다. SDFA 오토마톤(8)은 내부의 상태 기억부(9)에 현 상태(13)를 기억하여, 입력 문자 판독부(7)로부터 입력 문자(14)를 수취하고, 상태 천이표 저장부(4), 출력표 저장부(5)를 참조하여 상태 기억부(9)에 저장된 현 상태(13)의 갱신과 대조 결과(10)의 출력을 한다. 상태 기억부(9)는 SDFA 오토마톤(8)의 내부에 유지된 상태를 기억한다. 참조번호 10은 대조 결과이다. 참조번호 11은 상태 천이이며, 현 상태(13), 입력 문자(14), 다음 상태(15)의 세트이다. 참조번호 12는 출력 기술이며, 현 상태(13)와 조건 번호(16)의 세트이다. 참조번호 13은 현 상태이다. 참조번호 14는 입력 문자이다. 참조번호 15는 다음 상태이다. 참조번호 16은 조건 번호이다.
도 2는, 본 발명에 있어서의 대조 조건(2)의 구성을 도시하는 도면이다. 도면에서, 조건식(17)은, 대조 조건(2)을 구성하는 개별의 조건이며, 대조 조건(2) 중에 1 또는 복수의 조건식(17)이 포함된다.
도 3은, 본 발명에 있어서의 조건식(17)의 구성을 도시하는 도면이다. 조건식(17)은, 조건 번호(16)와 조건 기술(18)로 구성되어, 조건 번호(16)는 조건식을 일의에 구별하기 위한 번호이며, 조건 기술(18)은 정규 표현에 의해 기술된 대조의 조건이다.
도 4는, 본 발명에 있어서의 상태 천이표 생성부(3)의 구성을 도시하는 도면이다. 도면에서, 상태 천이표 생성 제어부(21)는, 상태 천이 생성표의 생성의 동작 수순을 제어한다. NFA 상태 집합(22), NFA 상태 천이 집합(23), NFA 출력 기술 집합(24), 상태 집합(25), 상태 천이 집합(26), 출력 기술 집합(27)은 상태 천이표 생성 제어부(21)가 참조하는 데이터이다.
도 5는, 본 발명에 있어서의 상태 천이표 저장부(4)의 구성의 일례를 도시하는 도면이다. 도면에서, 참조번호 31은 해쉬값 계산부이며, 현 상태(13)와 입력 문자(14)로부터 해쉬값(32)을 계산한다. 해쉬값(32)은 해쉬값 계산부(31)에 의해서 계산된 해쉬값이다. 상태 천이 해쉬 포인터(33)는 상태 천이 해쉬 체인(34)의 포인터를 복수 저장하는 표이다. 상태 천이 해쉬 체인(34)은 상태 천이 해쉬 체인(34)에의 포인터, 현 상태(13), 입력 문자(14), 다음 상태(15)의 세트이다. 상태 천이 해쉬표(35)는 상태 천이 해쉬 포인터(33)와 상태 천이 해쉬 체인(34)으로 이루어지는 데이터 구조이다. 비교부(36)는 외부로부터 입력된 현 상태(13a)와 입력 문자(14a)의 세트와, 상태 천이 해쉬표(35)에 저장된 현 상태(13b), 입력 문자(14b)를 비교하여, 다음 상태(15)를 출력한다.
도 6은, 본 발명에 있어서의 출력표 저장부(5)의 구성을 도시하는 도면이다. 조건 번호 인덱스(41)는 조건 번호 체인에의 포인터를 복수 저장한다. 조건 번호 체인(42)은, 조건 번호 체인(42)에의 포인터와 조건 번호(16)의 세트이다.
도 7은, 본 발명에 있어서의 대조 결과(10)의 일례를 도시하는 도면이다. 대조 결과(10)에는, 입력 문서(6)의 대조에 성공한 조건 번호(16)가 포함된다.
다음에, 본 발명의 동작 설명에 앞서서, 이하의 설명에서 이용하는 용어 및 기호의 설명을 행한다.
비특허문헌 1 등에 기재되어 있듯이, 종래부터 알려져 있는 출력 첨부 결정성 유한 오토마톤은, (Q, Σ, Δ, δ, λ, q0)의 세트에 의해 부여된다. 단 Q는 상태 집합이다. Σ는 입력 알파벳이며, 공문자 ε를 포함한다. Δ는 출력 알파벳, δ는 천이 함수(Q×Σ→Q), λ는 출력 함수(Q→Δ), q0는 초기 상태다.
본 발명의 SDFA 오토마톤(8)은 (Qs, Σs, Δs, δs, λs, q0)의 세트에 의해 부여된다.
여기서, Qs는 상태 집합(25)이며, 종래의 출력 첨부 유한 오토마톤의 상태 집합 Q에 상당하는 것이다.
Δs는 출력 알파벳이며, 본 실시예에서는 조건 번호(16)의 집합의 집합으로 된다.
δs는 상태 천이표 저장부(4)에 의해서 실현되는 상태 천이 함수이며, 이하, 현 상태(13)가 qs, 입력 문자(14)가 σs일 때 다음 상태(15)가 qd로 되는 것을,
δs(qs, σs)=qd
라고 표기한다.
q0는 초기 상태이며, 그 의미는 종래부터 알려져 있는 출력 첨부 결정성 유한 오토마톤과 동일하다.
Σs는 종래의 출력 첨부 유한 오토마톤의 입력 알파벳 Σ에 임의 문자 σany, 제외 문자 σother를 더한 확장 입력 알파벳이다. 즉,
Σs=Σ∪{σany, σother}
로 한다.
또한,
δs(qs, σs)=qd
일 때, 상태 천이(11)를 t로 하면,
t=trans(qs, qd, σs)
로 표기하는 것으로 한다.
현 상태(13) 입력 문자(14)의 세트에 대하여 다음 상태(15)가 존재하는 상태 천이(11)의 집합을 상태 천이 집합(26)이라고 부르고, T라고 표기한다. 또한, 상태 천이 t=trans(qs, qd, σs)에 대하여, qs를 기점, qd를 종점, σs을 천이 문자라고 부른다. 또한, 상태 천이 t의 기점을 부여하는 함수를 Source, 종점을 부여하는 함수를 Destination, 천이 문자를 부여하는 함수를 Char라고 부르고, 각각
qs=Source(t)
qd=Destination(t)
σs=Char(t)
라고 표기한다.
또한,
λs(qs)=r
일 때, 출력 기술(18)을 d라고 하면
d=desc(qs, r)
로 표기하는 것으로 한다.
현 상태(13)에 대하여 출력 알파벳 r이 비어 있지 않은 출력 기술(12)의 집합을 출력 기술 집합(27)이라고 부르고, D로 표기한다. 출력 기술 d=desc(qs, r)에 대하여, qs를 출력 상태, r를 출력 결과라고 부른다. 또한, 출력 기술 d의 출력 상태를 부여하는 함수를 State, 출력 결과를 부여하는 함수를 Result라고 부르고, 각각
qs=State(d)
r=Result(d)
로 표기하는 것으로 한다.
본 발명의 SDFA 오토마톤(8)을 생성하는 과정에서 NFA가 생성되지만, NFA는 (Q(NFA), Σs, Δs, δs( NFA ), λs( NFA ), q0 ( NFA ))의 세트에 의해서 표시된다.
여기서, Q( NFA )는 상태 집합(22)을 나타낸다. 상태 집합(25)은 NFA 상태의 집합의 집합으로 된다. 즉 상태 집합(25)을 Q로 표기할 때 Q=2Q( NFA )의 관계에 있다. 이하, NFA의 상태를 DFA의 상태와 구별하기 위해, q( NFA )로 표기하고, NFA의 초기 상태를 q0( NFA )로 표기한다.
δs( NFA )는 NFA의 상태 천이 함수이며, 현재의 NFA 상태(13)가 q( NFA ), 입력 문자(14)가 σs로부터 다음 상태의 집합으로의 함수이다.
λs( NFA )는 NFA의 출력 함수이고, 현재의 NFA 상태(13)가 q( NFA )일 때, 출력 알파벳이 r∈Δs로 되는 것을
λs( NFA )(q( NFA ))=r
로 표기한다.
Δs는 조건 번호(16)의 집합, Σs은 확장 입력 알파벳이며, 그 의미는 본 발명의 SDFA 오토마톤(8)과 동일하다.
NFA의 상태에 대하여, NFA 상태 천이를 아래와 같이 정한다. NFA의 상태 qd(NFA)가
qd ( NFA )∈δ(qs ( NFA ), σs)
일 때, NFA 상태 천이(32)를
t( NFA )=trans(qs ( NFA ), qd ( NFA ), σs)
로 표기하는 것으로 한다. NFA 상태 천이의 집합을 NFA 상태 천이 집합이라고 부르고, T( NFA )라고 표기한다. 또한, 마찬가지로 상태 천이 t( NFA )=trans(qs ( NFA ), qd(NFA), σs)에 대하여, qs ( NFA )를 기점, qd ( NFA )를 종점, σs를 천이 문자라고 부른다. 또한, 상태 천이 t( NFA )의 기점을 부여하는 함수를 Source, 종점을 부여하는 함수를 Destination, 천이 문자를 부여하는 함수를 Char라고 부르고, 각각
qs ( NFA )=Source(t( NFA ))
qd ( NFA )=Destination(t( NFA ))
σs( NFA )=Char(t( NFA ))
로 표기하는 것으로 한다.
NFA 상태 q( NFA )와 출력 알파벳 r의 세트를 NFA 출력 기술이라고 부르기로 한다.
λs(q( NFA ))=r
일 때, NFA 출력 기술(34)을 d( NFA )라고 하면
d( NFA )=desc(qs ( NFA ), r)
로 표기하는 것으로 한다.
NFA 상태(13)에 대하여 출력 알파벳 p이 비어 있지 않은 NFA 출력 기술의 집 합을 NFA 출력 기술 집합(24)이라고 부르고, D( NFA )로 표기한다. 출력 기술 d(NFA)=desc(q(NFA), r)에 대하여, q( NFA )를 출력 상태, r를 출력 결과라고 부른다. 또한, 출력 기술 d의 출력 상태를 부여하는 함수를 State, 출력 결과를 부여하는 함수를 Result라고 부르고, 각각
q( NFA )=State(d( NFA ))
r( NFA )=Result(d( NFA ))
로 표기하는 것으로 한다.
이상으로 용어 및 기호의 설명을 마치고, 다음에, 동작에 대하여 설명한다.
도 8에, 본 발명의 문자열 대조 장치(1)의 동작을 나타낸다.
본 발명의 문자열 대조 장치(1)는, 우선, 대조 조건(2)을 수취 상태 천이표 생성부(3)에 의해 상태 천이(11)와 출력 기술(12)을 생성하는 과정, 즉, 대조 조건의 컴파일의 수속을 실행한다(단계 S51).
이어서, 입력 문서(6)를 수취하고, 입력 문자 판독부(7) 및 SDFA 오토마톤(8)에 의해서, 상태 천이(11)와 출력 기술(12)을 참조하면서 대조 결과(10)를 출력하는 수속을 순차적으로 실행한다(단계 S52).
또, 본 실시예에서는 1회의 「대조 조건의 컴파일」에 대하여 「입력 문서의 대조」를 1회 실행하는 것으로 하고 있지만, 1회의 「대조 조건의 컴파일」의 수속으로 생성된, 상태 천이(11)와 출력 기술(12)을 이용하여, 복수개의 입력 문서에 대하여 「입력 문서의 대조」를 행하더라도 좋다.
다음에, 도 9에 의해, 수속 「대조 조건의 컴파일」에 대하여 설명한다.
우선 「ε 천이를 포함하는 NFA의 생성」의 수속에 의해, 정규 표현으로부터, ε 천이를 포함하는 NFA를 생성한다(단계 S101).
이어서, 「ε 천이의 제거」의 수속에 의해 NFA에 포함되는 ε 천이(공문자에 의한 천이)의 제거를 행한다(단계 S102).
이어서, 「초기 상태로의 천이의 추가」의 수속에 의해, 대조에 실패했을 때의 초기 상태로의 천이를 추가한다(단계 S103).
이어서, 「비결정적 천이의 제거」의 수속에 의해, 비결정적인 천이를 제거한다(단계 S104).
이어서, 「미사용 상태의 제거」의 수속에 의해, 지금까지의 수순에서 불필요하게 된 상태의 제거를 행한다(단계 S105).
이어서, 「상태수의 삭감」의 수속에 의해, 용장인 상태 및 용장인 상태 천이의 제거를 행한다(단계 S106).
이어서, 「상태 천이표와 출력표의 생성」의 수속에 의해, 상태 집합으로부터 상태 천이표와 출력표를 생성한다(단계 S107).
이상의 수순에 의해 수속 「대조 조건의 컴파일」을 실행할 수 있다.
단계 S101의, 「ε 천이를 포함하는 NFA의 생성」의 수순에 대해서는, 비특허문헌 1 등에 표시되어 있는 공지의 수순을 사용할 수 있다.
단, 도 24에 도시하는 바와 같이 정규 표현 중에 포함되는 임의의 문자를 나 타내는 메타캐릭터 「.」는 σany로 치환한다. 또, 이하, 도 24 ~ 도 31에서는 상태 q( NFA )를 단지 q로 표기하고 있다.
또한, 도 25에 도시하는 바와 같이 정규 표현 중에 포함되는, 특정 문자 집합 이외를 나타내는 메타캐릭터 「^」는 σother로 치환하고 또한, 해당하는 상태로부터 초기 상태 q0( NFA )로의 상태 천이를 추가한다고 하는 수순을 추가한다.
단계 S102의, 「ε 천이의 제거」의 수순에 관해서도, 비특허문헌 1 등에 표시되어 있는 공지의 수순에 의해, ε 천이(공문자에 의한 천이)를 천이 목적지 집합으로의 천이로 치환하는 것에 의해, 실현할 수 있다.
다음에, 도 10에 의해서 단계 S103의 「초기 상태로의 실패 천이의 추가」의 수속을 나타낸다.
우선, 단계 S102에 의해서 생성된 NFA의 초기 상태 q0 ( NFA )로부터 σany에 의한 천이가 존재하지 않는 경우는 단계 S202로 진행한다. 그 이외의 경우는, 단계 S203으로 진행한다(단계 S201).
「초기 상태로의 실패 천이의 추가(초기 상태로부터 σany에 의한 천이 목적지가 존재하지 않는 경우)」의 수속을 실행하여, 종료한다(단계 S202).
단계 S201에서 NFA의 초기 상태 q0 ( NFA )로부터 σany에 의한 천이가 존재하는 경우는 「초기 상태로의 실패 천이의 추가(초기 상태로부터 σany에 의한 천이 목적지가 존재하는 경우)」의 수속을 실행하여, 종료한다(단계 S203).
또, 본 실시예에서는 NFA의 초기 상태 q0 ( NFA )에서 σany에 의한 천이 목적지가 존재하는지 여부에 따라 처리를 나누고 있지만, 단계 S202의 처리는 단계 S203에 의해서 대행하는 것도 가능하다. 단계 S202의 처리는 단계 S203와 비교하면 적용 가능한 범위가 「초기 상태로부터 σany에 의한 천이 목적지가 존재하는」 경우에 한정되지만, 보다 상태 천이의 수를 삭감할 수 있다. 초기 상태로부터 σany에 의한 천이 목적지가 존재한다는 것은, 대조 조건으로 되는 정규 표현의 선두에 임의 문자 「.」가 지정된다는 것이지만, 실용상은 이러한 지정이 되는 것은 적기 때문에, 많은 경우는 단계 S202의 처리를 적용함으로써 상태 천이의 수를 삭감할 수 있다.
이상의 수순에 따라서, 수속 「초기 상태로의 실패 천이의 추가」를 행할 수 있다.
다음에, 단계 S202의 「초기 상태로의 실패 천이의 추가(초기 상태로부터 σany에 의한 천이 목적지가 존재하지 않는 경우)」의 수속에 대하여 설명한다.
일반적으로, 연속적인 문자열 대조를 행하는 NFA 또는 DFA에서는, 모든 상태로부터 초기 상태로의 ε 천이를 추가함으로써, 임의의 문자 위치로부터의 문자열 대조를 실현할 수 있다. 도 26에, 정규 표현 (a|b|c(d|e))f에 대응하는 NFA에 ε 천이를 추가한 예를 나타낸다. 본 발명의 SDFA 오토마톤(8)에서는, 천이에 실패했을 때에 입력 문자를 진행시키지 않고 초기 상태 q0에 되돌아가 다시 상태 천이를 행하기 때문에, 초기 상태 q0로의 ε 천이를 생략할 수 있다. 즉, 도 27에 나타내는 NFA를 구성하면 좋고, 상태 천이의 총수를 대폭 삭감할 수 있다. 그러나, 초기 상태 q0( NFA )로부터 천이 문자 σ에 의해 상태 q1 ( NFA )로 천이 가능할 때, 상태 q( NFA )로부터의 천이 문자 σ에 의한 천이가 존재하거나, 또는, 상태 q( NFA )를 기점으로 하는 어느 하나의 천이 문자 σ가 σany인 경우는, σ에 의한 천이가 성공한 경우에도 σ에 의해 q1( NFA )로도 천이 가능하기 때문에, 상태 q( NFA )로부터 σ에 의한 상태 q1 ( NFA )로의 상태 천이를 추가한다. 도 28에, 정규 표현 (a|b|c(d|e))f의 경우의 예를 나타낸다. 도 28의 예에서는 초기 상태 q0( NFA )로부터 천이 문자 a에 의해 상태 q1 ( NFA )로 천이 가능하고, 상태 q3( NFA )로부터 천이 문자 a에 의한 천이가 존재하기 때문에, 도 29와 같이 천이 문자 a에 의한 상태 q3( NFA )로부터 상태 q1 ( NFA )로의 천이를 추가한다. 상태 q3( NFA )로부터 천이 문자 a에 의한 천이는 비결정적인 상태 천이로 되지만, 후속의 「비결정적 천이의 제거」의 수속에 의해, 이 비결정적 천이는 최종적으로 제거된다. 수속 「초기 상태로의 실패 천이의 추가(초기 상태로부터 σany에 의한 천이 목적지가 존재하지 않는 경우)」 및 「초기 상태로의 실패 천이의 추가(초기 상태로부터 σany에 의한 천이 목적지가 존재하는 경우)」는 이 처리를 행하기 위한 것이다.
도 11에 의해, 단계 S202의 「초기 상태로의 실패 천이의 추가(초기 상태로 부터 σany에 의한 천이 목적지가 존재하지 않는 경우)」의 수속에 대하여 설명한다.
우선, t0 ( NFA )을 단계 S102에 의해 생성된 NFA의 초기 상태 q0 ( NFA )를 기점으로 하는 최초의 상태 천이로 하고, 단계 S302로 진행한다(단계 S301).
NFA의 초기 상태 q0 ( NFA )를 기점으로 하는 모든 상태 천이 t0 ( NFA )의 처리를 종료하면 수속을 종료한다. 그 이외의 경우는 단계 S303로 진행한다(단계 S302).
σ를 Char(t0 ( NFA ))로 하고, 단계 S304로 진행한다(단계 S303).
q( NFA )를 NFA 상태 집합 Q( NFA )에 포함되는 최초의 NFA 상태로 하고, 단계 S305로 진행한다(단계 S304).
NFA 상태 집합 Q( NFA )에 포함되는 모든 NFA 상태 q( NFA )의 처리를 종료하면 단계 S313로 진행한다. 그 이외의 경우는 단계 S306로 진행한다(단계 S305).
NFA 상태 q( NFA )가 초기 상태 q0 ( NFA )인 경우는, 단계 S312로 진행한다. 그 이외의 경우는 단계 S307로 진행한다(단계 S306).
t( NFA )를, q( NFA )를 기점으로 하는 최초의 NFA 상태 천이로 하고, 단계 S308로 진행한다(단계 S307).
q( NFA )을 기점으로 하는 모든 NFA 상태 천이 t( NFA )의 처리를 종료하면 단계 S312로 진행한다. 그 이외의 경우는 단계 S309로 진행한다(단계 S308).
Char(t( NFA ))=σ, Char(t( NFA ))=σany 중 어느 하나의 조건이 성립하는 경우는 단계 S310로 진행한다. 어느 쪽의 조건도 성립하지 않는 경우는 단계 S311로 진행한다(단계 S309).
NFA 상태 천이 trans(q( NFA ), Destination(t0 ( NFA )), σ)가 NFA 상태 천이 집합 T(NFA)에 포함되어 있지 않으면 T에 더하고, 단계 S311로 진행한다(단계 S310).
t( NFA )를 NFA 상태 q( NFA )를 기점으로 하는 다음 NFA 상태 천이로 하고, 단계 S305로 진행한다(단계 S311).
단계 S306에서 NFA 상태 q( NFA )가 NFA의 초기 상태 q0 ( NFA )인 경우, 또는 단계 S308에서 q( NFA )를 기점으로 하는 모든 NFA 상태 천이 t( NFA )를 처리한 경우는 NFA 상태 q( NFA )를 NFA 상태 집합 QNFA에 포함되는 다음 NFA 상태로 하고, 단계 S305로 진행한다(단계 S312).
단계 S305에서 모든 NFA 상태 q( NFA )의 처리를 종료한 경우는, t0 ( NFA )을 NFA의 초기 상태 q0( NFA )를 기점으로 하는 다음 NFA 상태 천이로 하고, 단계 S302로 진행한다(단계 S313).
이상의 수순에 따라, 수속 「초기 상태로의 실패 천이의 추가(초기 상태로부터 σany에 의한 천이 목적지가 존재하지 않는 경우)」를 행할 수 있다.
다음에, 단계 S203의 「초기 상태로의 실패 천이의 추가(초기 상태로부터 σ any에 의한 천이 목적지가 존재하는 경우)」의 수속에 대하여 설명한다. 이 수속의 목적은 단계 S202와 동일하지만, 도 30에 나타내는 정규 표현(.|b|c(d|e))f와 같이, 초기 상태로부터 σany에 의한 천이 목적지 q1 ( NFA )가 존재하는 경우는, 모든 상태에 대하여, 천이가 성공한 경우에도 q1( NFA )로도 천이 가능해지기 때문에, 도 31에 도시하는 바와 같이, NFA의 초기 상태 q0 ( NFA )를 제외한 모든 NFA 상태 q( NFA )와 모든 천이 문자 σ에 대하여, q1( NFA )로의 천이를 추가한다.
도 12에 의해, 단계 S203의 「초기 상태로의 실패 천이의 추가(초기 상태로부터 σany에 의한 천이 목적지가 존재하는 경우)」의 수속에 대하여 설명한다.
우선, t0 ( NFA )를 단계 S102에 의해서 생성된 NFA의 초기 상태 q0 ( NFA )를 기점으로 하는 최초의 NFA 상태 천이로 하고, 단계 S352로 진행한다(단계 S351).
NFA의 초기 상태 q0 ( NFA )를 기점으로 하는 모든 NFA 상태 천이 t0 ( NFA )의 처리를 종료하면 수속을 종료한다. 그 이외의 경우는 단계 S353로 진행한다(단계 S352).
σ를 Char(t0 ( NFA ))로 하고, 단계 S354로 진행한다(단계 S353).
q를 NFA 상태 집합 Q( NFA )에 포함되는 최초의 NFA 상태로 하고, 단계 S355로 진행한다(단계 S354).
NFA 상태 집합 Q( NFA )에 포함되는 모든 NFA 상태 q의 처리를 종료하면 단계 S359로 진행한다. 그 이외의 경우는 단계 S356로 진행한다(단계 S355).
NFA 상태 q( NFA )가 초기 상태 q0 ( NFA )인 경우는, 단계 S356로 진행한다. 그 이외의 경우는 단계 S357로 진행한다(단계 S306).
NFA 상태 천이 trans(q( NFA ), Destination(t0 ( NFA )), σ( NFA ))이 NFA 상태 천이 집합 T( NFA )에 포함되어 있지 않으면 T( NFA )에 더하고, 단계 S355로 진행한다(단계 S358).
단계 S355에서 모든 NFA 상태 q( NFA )의 처리를 종료한 경우는, t0 ( NFA )을 NFA의 초기 상태 q0( NFA )를 기점으로 하는 다음 NFA 상태 천이로 하고, 단계 S352로 진행한다(단계 S359).
이상의 수순에 따라서, 수속 「초기 상태로의 실패 천이의 추가(초기 상태로부터 σany에 의한 천이 목적지가 존재하는 경우)」를 행할 수 있다.
다음에 단계 S104의 「비결정적 천이의 제거」의 수속에 대하여 설명한다. 본 수속은, NFA에 포함되는 비결정적인 천이를 제거하여, 결정적인 천이를 생성하는 것이다. 도 32에 일례를 나타낸다. 상태 qsource로부터 천이 문자 a에 의한 상태 천이로서 q1 및 q2이 존재하는, 즉 비결정적이기 때문에, 천이 목적지의 상태를 병합하는, 즉 도 33에 도시하는 바와 같이 천이 목적지의 NFA 상태 집합 q1 및 q2의 합집합 qn=q1∪q2로의 상태 천이로 한다. 이 수순은 기본적으로 비특허문헌 1 등에 표시되어 있는 DFA의 생성 수순과 마찬가지지만, 본 실시예에서는, 또한, 도 34와 같이, 임의 문자 σany에 의한 상태 천이 q2와 천이 문자 a에 의한 상태 천이의 종점 q1을 포함하는 경우에 대하여, 비결정적인 천이 문자 a에 관한 상태 qn=q1∪q2로의 상태 천이 이외에, 제외 문자 σother에 의한 상태 q1에의 천이를 생성한다(도 35).
도 13에 의해서, 단계 S104의 「비결정적 천이의 제거」의 수속에 대하여 설명한다. 본 수속 및 「σother에 관한 비결정적 천이의 제거」의 수속에서는 변수 Retry를 사용한다. 변수 Retry는 TRUE 또는 FALSE 중 어느 하나의 값을 취할 수 있다.
우선 「상태 집합의 초기화」의 수속을 행하고, 단계 S402로 진행한다(단계 S401).
이어서, 변수 Retry를 FALSE로 초기화하고, 단계 S401로 진행한다(단계 S402).
이어서, 「Σ에 관한 비결정적 천이의 제거」의 수속을 행하고, 단계 S404로 진행한다(단계 S403).
이어서, 「σother에 관한 비결정적 천이의 제거」의 수속을 행하고, 단계 S405로 진행한다(단계 S404).
변수 Retry가 TRUE인 경우는 단계 S403로 진행한다. FALSE의 경우는 종료한다(단계 S405).
이상의 수순에 따라서, 수속 「비결정적 천이의 제거」를 행할 수 있다.
다음에 단계 S401의 「상태 집합의 초기화」의 수속에 대하여 설명한다. 본 수속은, DFA의 상태를 생성하기 위해, 필요한 상태 집합을 초기화하기 위한 것이며, 모든 NFA의 상태 q( NFA )에 대하여, DFA의 상태{q( NFA )}를 관련되는 상태 천이와 동시에 생성하는 것을 목적으로 한다.
도 14에 의해서, 단계 S401의 「상태 집합의 초기화」의 수속에 대하여 설명한다.
우선, 상태 집합 Q을 비우고 초기화하여 단계 S502로 진행한다(단계 S501).
다음에, q( NFA )를 NFA 상태 집합 Q( NFA )에 포함되는 최초의 NFA 상태로 하고, 단계 S502로 진행한다(단계 S502).
NFA 상태 집합 Q( NFA )에 포함되는 모든 NFA 상태 q( NFA )를 처리한 경우는 단계 S506로 진행한다. 그 이외의 경우는, 단계 S504로 진행한다(단계 S503).
상태 집합 Q에 NFA 상태 집합(즉 DFA의 상태) {q( NFA )}를 더하고, 단계 S505로 진행한다(단계 S504).
q( NFA )를 NFA 상태 집합 Q( NFA )에 포함되는 다음 NFA 상태로 하고, 단계 S503로 진행한다(단계 S505).
단계 S503에 있어서 NFA 상태 집합 Q(NFA)에 포함되는 모든 NFA 상태 q(NFA)를 처리한 경우는, 상태 천이 집합 T을 비우고, 단계 S507로 진행한다(단계 S506).
다음에, t( NFA )를 NFA 상태 천이 집합 T( NFA )에 포함되는 최초의 NFA 상태 천이로 하고, 단계 S508로 진행한다(단계 S507).
NFA 상태 천이 집합 T( NFA )에 포함되는 모든 NFA 상태 천이 t( NFA )를 처리하면 단계 S511로 진행한다. 그 이외의 경우는, 단계 S509로 진행한다(단계 S508).
상태 천이 집합 T에 trans({Source(t( NFA ))}, {Destination(t( NFA ))}, Char(t(NFA)))를 더하고, 단계 S510로 진행한다(단계 S509).
t( NFA )를 NFA 상태 천이 집합 T( NFA )에 포함되는 다음 NFA 상태 천이로 하고, 단계 S508로 진행한다(단계 S510).
단계 S508에 있어서 T( NFA )에 포함되는 모든 NFA 상태 천이 t( NFA )를 처리한 경우는, 출력 기술 집합 D를 비우고, 단계 S512로 진행한다(단계 S511).
다음에, d( NFA )를 NFA 출력 기술 집합 D( NFA )에 포함되는 최초의 NFA 출력 기술로 하고, 단계 S508로 진행한다(단계 S512).
NFA 출력 기술 집합 D( NFA )에 포함되는 모든 NFA 출력 기술 d( NFA )를 처리하면 종료한다. 그 이외의 경우는, 단계 S509로 진행한다(단계 S513).
출력 기술 집합 D에 desc({State(d( NFA ))}, Result(d( NFA )))를 더하고, 단계 S510로 진행한다(단계 S514).
d( NFA )를 NFA 출력 기술 집합 D( NFA )에 포함되는 다음 NFA 출력 기술로 하고, 단계 S508로 진행한다(단계 S515).
이상의 수순에 의해서, 수속 「상태 집합의 초기화」를 행할 수 있다.
다음에, 단계 S403의 「Σ에 관한 비결정적 천이의 제거」의 수속에 대하여 설명한다. 본 수속에서는, 도 32 및 도 34에 나타낸 예와 같이, 하나의 천이 문자 σ∈Σ에 대하여 복수의 천이 목적지가 존재할 때, 새로운 상태로의 천이로 치환하는 것에 의해, 각 천이 문자 σ에 의한 천이 목적지를 일의에 확정하는 것을 목적으로 한다.
도 15에 의해서, 단계 S403의 「Σ에 관한 비결정적 천이의 제거」의 수속에 대하여 설명한다. 본 수속에서는 변수 Found를 사용한다. 변수 Retry는 TRUE 또는 FALSE 중 어느 하나의 값을 취할 수 있다.
우선, Found를 FALSE로 초기화하고, 단계 S602로 진행한다(단계 S601).
다음에, q를 상태 집합 Q 중의 최초의 상태 천이로 하고, 단계 S603로 진행한다(단계 S602).
상태 집합 Q 중의 모든 상태 q를 처리한 경우는 단계 S616로 진행한다. 그 이외의 경우는 단계 S604로 진행한다(단계 S603).
σ를 입력 알파벳 Σ 중의 최초의 알파벳으로 하고, 단계 S605로 진행한다(단계 S604).
입력 알파벳 Σ 중의 모든 알파벳 σ를 처리한 경우는 단계 S610로 진행한 다. 그 이외의 경우는 단계 S606로 진행한다(단계 S605).
q를 기점으로 하여, σ를 천이 문자로 하는 상태 천이 t가 복수 존재하거나, 또는 σ를 천이 문자로 하는 상태 천이 t와 σany를 천이 문자로 하는 상태 천이 t가 존재하는, 즉, σ에 의한 천이가 비결정적인 경우는, 단계 S607로 진행한다. 그 이외의 경우는 단계 S609로 진행한다(단계 S606).
파라미터 qsource를 q, σt를 σ로 설정하여 수속 「신 상태의 생성」을 행하고, 단계 S608로 진행한다(단계 S607).
변수 Found에 TRUE를 설정하고, 단계 S609로 진행한다(단계 S608).
σ를 입력 알파벳 Σ 중의 다음 알파벳으로 하고, 단계 S605로 진행한다(단계 S609).
단계 S605에서 입력 알파벳 Σ 중의 모든 알파벳 σ를 처리한 경우는, t을 상태 q를 기점으로 하는 최초의 상태 천이로 하고, 단계 S611로 진행한다(단계 S610).
상태 q를 기점으로 하는 모든 상태 천이 t를 처리한 경우는 단계 S615로 진행한다. 그 이외의 경우는 단계 S612로 진행한다(단계 S611).
t의 천이 문자 Char(t)가 σany인 경우는 단계 S613로 진행한다. 그 이외의 경우는 단계 S614로 진행한다(단계 S612).
t의 천이 문자를 σother로 치환하는, 즉 t를 (Source(t), Destination(t), σ other)로 치환하고, 단계 S614로 진행한다(단계 S613).
t를 상태 q를 기점으로 하는 다음 상태 천이로 하고, 단계 S611로 진행한다(단계 S614).
단계 S611에서 상태 q를 기점으로 하는 모든 상태 천이 t를 처리한 경우는 q을 상태 집합 Q 중의 다음 상태 천이로 하고, 단계 S603로 진행한다(단계 S615).
단계 S603에서 상태 집합 Q 중의 모든 상태 q를 처리한 경우는, 변수 Found가 TRUE이면 단계 S601로 진행한다. 그 이외의 경우는 종료한다(단계 S616).
이상의 수순에 의해, 수속 「Σ에 관한 비결정적 천이의 제거」를 행할 수 있다.
다음에, 단계 S404의 수속 「σother에 관한 비결정적 천이의 제거」에 대하여 설명한다. 본 수속에서는, 도 36에 도시하는 바와 같이 「Σ에 관한 비결정적 천이의 제거」에 의해 생성된 천이 문자 σother에 의한 천이에 대하여, 상태 qsource로부터 복수의 상태 q1 및 q2로의 상태 천이가 존재하는 경우, 그들의 합집합 qn=q1∪q2의 상태로의 천이로 치환하는 것에 의해, 도 37에 도시하는 바와 같이, 천이 문자 σo th er에 의한 비결정적인 천이를 제거한다.
도 16에 의해, 단계 S404의 수속 「σother에 관한 비결정적 천이의 제거」에 대하여 설명한다. 본 수속에서는 변수 Found를 사용한다. 변수 Found는 TRUE 또는 FALSE 중 어느 하나의 값을 들 수 있다. 또한 본 수속에서는 변수 Counter를 사용한다. 변수 Counter는 0 이상의 정수값을 취할 수 있다.
우선, 변수 Found에 FALSE를 설정하고, 단계 S702로 진행한다(단계 S701).
q를 상태 집합 Q 중의 최초의 상태로 하고, 단계 S703로 진행한다(단계 S702).
상태 집합 Q 중의 모든 상태 q를 처리한 경우는 단계 S714로 진행한다. 그 이외의 경우는 단계 S701로 진행한다(단계 S703).
변수 Counter에 0을 설정하고, 단계 S705로 진행한다(단계 S704).
t에 q를 기점으로 하는 최초의 상태 천이를 설정하고 단계 S706로 진행한다(단계 S705).
q를 기점으로 하는 모든 상태 천이 t를 처리한 경우는 단계 S710로 진행한다. 그 이외의 경우는 단계 S707로 진행한다(단계 S706).
t의 천이 문자 Char(t)가 σother인 경우는 단계 S708로 진행한다. 그 이외의 경우는 단계 S709로 진행한다(단계 S707).
변수 Counter에 1을 더하고, 단계 S709로 진행한다(단계 S708).
t에, q를 기점으로 하는 다음 상태 천이를 설정하고, 단계 S705로 진행한다(단계 S709).
단계 S706에 있어서 q를 기점으로 하는 모든 상태 천이 t를 처리한 경우는, 변수 Counter의 값이 2 이상이면 단계 S711로 진행한다. 그 이외의 경우는 단계 S713로 진행한다(단계 S710).
파라미터 qsource를 q, σt를 σother로 설정하여, 수속 「신 상태의 생성」을 호출하고, 단계 S712로 진행한다(단계 S711).
변수 Found에 TRUE를 설정하고, 또한 변수 Retry에 TRUE를 설정하고, 단계 S713로 진행한다(단계 S712).
q를 상태 집합 Q 중의 다음 상태 천이로 하고, 단계 S703로 진행한다(단계 S713).
단계 S703에서 상태 집합 Q 중의 모든 상태 q를 처리한 경우는, 변수 Found가 TRUE인 경우는 단계 S701로 진행한다. 그 이외의 경우는 종료한다(단계 S714).
이상의 수순에 의해, 수속 「σother에 관한 비결정적 천이의 제거」를 행할 수 있다.
다음에, 단계 S607 및 단계 S711의 수속 「신 상태의 생성」의 수순에 대하여 설명한다. 본 수순은, 상태 qsource로부터 천이 문자 σt에 관한 각각의 비결정적인 상태 천이를 제거하는 수순이다.
도 17에 의해서, 단계 S607 및 단계 S711의 수속 「신 상태의 생성」의 수순에 대하여 설명한다. 수속 「신 상태의 생성」에서는 qsource 및 σt를 파라미터로 한다.
우선, qsource를 기점으로 하여, σt에 의해 천이 가능한 상태의 집합을 구하고, 그들의 NFA 상태에 관한 합집합을 구하고, 상태 qn로 한다. qn가 상태 천이 집 합 T에 포함되어 있는 경우는 단계 S817로 진행한다. 그 이외의 경우는 단계 S802로 진행한다(단계 S801).
다음에, 상태 qn를 상태 집합 Q에 추가하고, 단계 S803로 진행한다(단계 S802).
t를 qsource을 기점으로 하는 최초의 상태 천이로 하고, 단계 S804로 진행한다(단계 S803).
qsource를 기점으로 하는 모든 상태 천이 t를 처리한 경우는 단계 S817로 진행한다. 그 이외의 경우는 단계 S805로 진행한다(단계 S804).
Char(t)=σt의 경우, 또는 Char(t)=σany의 경우는 단계 S806로 진행한다. 그 이외의 경우는 단계 S816로 진행한다(단계 S805).
t1를, Destination(t)을 기점으로 하는 최초의 상태 천이로 하고, 단계 S807로 진행한다(단계 S806).
Destination(t)를 기점으로 하는 모든 상태 천이 t1를 처리한 경우는 단계 S812로 진행한다. 그 이외는 단계 S808로 진행한다(단계 S807).
상태 천이 trans(qn, Destination(t1), Char(t1))∈T이 아니면 T에 trans(qn, Destination(t1), Char(t1))을 추가하고, 단계 S809로 진행한다(단계 S808).
Char(t1)=σother이면 단계 S810로 진행한다. 그 이외이면 단계 S811로 진행 한다(단계 S809).
수속 「σother에 의한 상태 천이의 보정」을 호출하고, 단계 S811로 진행한다. 이 때, 파라미터로서 (qsource, qn, t1)를 부여한다(단계 S810).
t1를, Destination(t)을 기점으로 하는 다음 상태 천이로 하고, 단계 S807로 진행한다(단계 S811).
단계 S807에서 Destination(t)를 기점으로 하는 모든 상태 천이 t1를 처리한 경우는, d를 Destination(t)을 출력 상태로 하는 최초의 출력 기술로 하고, 단계 S813로 진행한다(단계 S812).
Destination(t)을 출력 상태로 하는 모든 출력 기술 d를 처리한 경우는 단계 S816로 진행한다. 그 이외의 경우는, 단계 S814로 진행한다(단계 S813).
출력 기술 desc(qn, Result(d))∈D가 아니면 D에 desc(qn, Result(d))를 더하고, 단계 S815로 진행한다(단계 S814).
d를 Destination(t)을 출력 상태로 하는 다음 출력 기술로 하고, 단계 S813로 진행한다(단계 S815).
t을 qsource을 기점으로 하는 다음 상태 천이로 하고, 단계 S804로 진행한다(단계 S816).
단계 S801에서 qn가 상태 천이 집합 T에 포함되어 있지 않은 경우, 및 단계 S804에서 qsource를 기점으로 하는 모든 상태 천이 t를 처리한 경우는, t을 qsource를 기점으로 하는 최초의 상태 천이로 하고, 단계 S818로 진행한다(단계 S817).
qsource를 기점으로 하는 모든 상태 천이 t를 처리한 경우는 단계 S822로 진행한다. 그 이외의 경우는 단계 S819로 진행한다(단계 S818).
Char(t)=σt의 경우는 단계 S820로 진행한다. 그 이외의 경우는 단계 S821로 진행한다(단계 S819).
상태 천이 t를 상태 천이 집합 T에서 삭제하고, 단계 S821로 진행한다(단계 S820).
t를 qsource를 기점으로 하는 다음 상태 천이로 하고, 단계 S818로 진행한다(단계 S821).
단계 S818에서 qsource를 기점으로 하는 모든 상태 천이 t를 처리한 경우는, 상태 천이 trans(qsource, qn, σt)∈T가 아니면 T에 trans(qsource, qn, σt)를 추가하여, 종료한다(단계 S822).
이상의 수순에 의해, 수속 「신 상태의 생성」을 행할 수 있다.
다음에 단계 S811의 수속 「σother에 의한 상태 천이의 보정」에 대하여 설명한다. 본 수속은, 도 38에 도시하는 바와 같이, 비결정적 천이의 제거시에 병합해야 할 상태 q1, q2를 기점으로 하는 상태 천이 중에 천이 문자 σother에 의한 상태 천이가 포함되는 경우의, 상태 q1, q2을 기점으로 하는 상태 천이의 종점으로 되는 상태의 병합의 수순을 나타내는 것이다. 도 38의 상태 q1, q2를 병합하면 도 39와 같이 되고, 상태 qn=q1∪q2 천이 문자 b에 의한 상태 천이의 종점은 q3∪q5로 된다. 마찬가지로, 도 40에 나타내는 상태 q1, q2를 병합하면, 도 41에 나타내는 바와 같이 천이 문자 b, c, σother에 의한 상태 천이의 종점은, 각각 q3∪q6, q4∪q5, q4∪q6로 된다.
도 18에 의해서, 단계 S811의 수속 「σother에 의한 상태 천이의 보정」에 대하여 설명한다. 본 수속에서는, 확장 입력 알파벳 σ∈Σs의 집합, CharSet을 이용한다.
우선 CharSet을 비워 초기화하고, 단계 S902로 진행한다(단계 S901).
다음에, t를 Source(tother)을 기점으로 하는 최초의 상태 천이로 하고, 단계 S903로 진행한다(단계 S902).
Source(tother)를 기점으로 하는 모든 상태 천이를 처리한 경우는, 단계 S907로 진행한다. 그 이외의 경우는, 단계 S904로 진행한다(단계 S903).
Char(t)가 입력 알파벳에 포함되는, 즉, Char(t)≠σany 또한 Char(t)≠σother의 경우는 단계 S906로 진행한다. 그 이외의 경우는 단계 S905로 진행한다(단계 S904).
CharSet에 Char(t)를 더하고, 단계 S906로 진행한다(단계 S905).
t를 Source(tother)를 기점으로 하는 다음 상태 천이로 하고, 단계 S903로 진행한다(단계 S906).
단계 S903에서 Source(tother)를 기점으로 하는 모든 상태 천이를 처리한 경우는, t을 상태 q를 기점으로 하는 최초의 상태 천이로 하고, 단계 S908로 진행한다(단계 S907).
상태 q를 기점으로 하는 모든 상태 천이 q를 처리한 경우는 종료한다. 그 이외의 경우는 단계 S909로 진행한다(단계 S908).
Destination(t)≠Source(tother)의 경우는 단계 S910로 진행한다. 그 이외의 경우는 단계 S916로 진행한다(단계 S909).
t1을 Destination(t)을 기점으로 하는 최초의 상태 천이로 하고, 단계 S911로 진행한다(단계 S910).
Destination(t)를 기점으로 하는 모든 상태 천이 t1를 처리한 경우는 단계 S916로 진행한다. 그 이외의 경우는 단계 S912로 진행한다(단계 S911).
Char(t1)가 입력 알파벳 Σ에 포함되는, 즉, Char(t1)≠σany 또한 Char(t1)≠σo th er의 경우는 단계 S913로 진행한다. 그 이외의 경우는 단계 S915로 진행한다(단계 S912).
Char(t1)가 CharSet에 포함되는 경우는 단계 S915로 진행한다. 그 이외의 경우는 단계 S914로 진행한다(단계 S913).
상태 천이 trans(qn, Destination(tother), Char(t1))∈T이 아니면 T에 trans(qn, Destination(tother), Char(t1))를 더하고, 단계 S915로 진행한다(단계 S914).
t1를 Destination(t)을 기점으로 하는 다음 상태 천이로 하고, 단계 S911로 진행한다(단계 S915).
단계 S909에서 Destination(t)≠Source(tother)가 아니던 경우, 또는 단계 S911에서 Destination(t)를 기점으로 하는 모든 상태 천이 t1를 처리한 경우는, t을 상태 q를 기점으로 하는 다음 상태 천이로 하고, 단계 S908로 진행한다(단계 S916).
이상의 수순에 의해, 수속 「σother에 의한 상태 천이의 보정」을 행할 수 있다.
다음에, 단계 S105의 「미사용 상태의 제거」의 수속에 대하여 설명한다. 본 수속에서는, 지금까지의 처리의 결과 발생한, 상태 천이의 종점으로 되지 않는 상태, 즉, 어떠한 입력에 대하여도 결코 도달하지 않는 상태를 삭제한다.
도 19에 의해서, 단계 S105의 「미사용 상태의 제거」의 수속에 대하여 설명한다. 본 수속에서는 변수 Found를 이용한다. 변수 Found는 TRUE 또는 FALSE 중 어느 하나의 값을 들 수 있다.
우선, 변수 Found를 FALSE로 하고, 단계 S1002로 진행한다(단계 S1001).
다음에, q를 상태 집합 Q에 포함되는 최초의 상태로 하고, 단계 S1003로 진행한다(단계 S1002).
상태 집합 Q에 포함되는 모든 상태 q를 처리한 경우는 단계 S1017로 진행한다. 그 이외의 경우는 단계 S1004로 진행한다(단계 S1003).
q가 초기 상태 q0의 경우는 단계 S1016로 진행한다. 그 이외의 경우는 단계 S1005로 진행한다(단계 S1004).
q를 종점으로 하는 상태 천이가 존재하는 경우는 단계 S1016로 진행한다. 그 이외의 경우는 단계 S1006로 진행한다(단계 S1005).
변수 Found를 TRUE로 하고, 단계 S1007로 진행한다(단계 S1006).
t를 q을 기점으로 하는 최초의 상태 천이로 하고, 단계 S1008로 진행한다(단계 S1007).
q를 기점으로 하는 모든 상태 천이 t를 처리한 경우는 단계 S1011로 진행한다. 그 이외의 경우는 단계 S1009로 진행한다(단계 S1008).
상태 천이 t를 상태 천이 집합 T에서 제거하고, 단계 S1010로 진행한다(단계 S1009).
t를 q을 기점으로 하는 다음 상태 천이로 하고, 단계 S1008로 진행한다(단계 S1010).
단계 S1008에서 q를 기점으로 하는 모든 상태 천이 t를 처리한 경우는, d를 q을 출력 상태로 하는 최초의 출력 기술로 하고, 단계 S1012로 진행한다(단계 1011).
q를 출력 상태로 하는 모든 출력 기술 d를 처리한 경우는 단계 S1015로 진행한다. 그 이외의 경우는 단계 1013로 진행한다(단계 1012).
출력 기술 d를 출력 기술 집합 D에서 삭제하고, 단계 S1014로 진행한다(단계 S1013).
d를 q을 출력 상태로 하는 다음 출력 기술로 하고, 단계 S1012로 진행한다(단계 S1014).
단계 S1012에서 q를 출력 상태로 하는 모든 출력 기술 d를 처리한 경우는, 상태 q를 상태 집합 Q에서 삭제하고, 단계 S1012로 진행한다(단계 S1015).
q를 상태 집합 Q에 포함되는 다음 상태로 하고, 단계 S1003로 진행한다(단계 S1016).
단계 1003에서 상태 집합 Q에 포함되는 모든 상태 q를 처리한 경우는, 변수 Found를 조사하여 Found가 TRUE인 경우는 단계 S1002로 진행한다. 그 이외의 경우는 종료한다(단계 1017).
이상의 수순에 의해, 수속 「미사용 상태의 제거」를 행할 수 있다.
또, 수속 「미사용 상태의 제거」는, 상태 천이표를 저장하는 데 필요한 메모리 용량을 삭감하는 것을 목적으로 하고 있다. 따라서, 본 수속을 생략하더라도 수속 「입력 문서의 대조」를 실행하는 것은 가능하고, 생략하는 것에 의해, 「대조 조건의 컴파일」에 요하는 시간을 단축할 수 있다.
다음에, 도 20에 의해서, 단계 S106의 「용장 상태의 제거」의 수속에 대하 여 설명한다. 본 수속에서는, 두 가지의 불필요한 상태를 제거한다. 제 1 경우는, σo th er에 의한 상태 천이와 동일한 종점의 상태를 갖는 상태 천이이다. 도 42에 일례를 나타낸다. 도 42에서, 천이 문자 b에 의한 q3을 종점으로 하는 상태 천이를 삭제하더라도 SDFA 오토마톤의 동작은 동일하며, 이 상태 천이를 삭제함으로써, 상태 천이의 총수를 삭감하여, 상태 천이표를 저장하는 데 필요한 메모리 용량을 삭감할 수 있다. 제 2 경우는, 모든 천이 문자에 대한 상태 천이의 종점이 동일한 복수의 상태의 병합이다. 도 43에 일례를 나타낸다. 도 43에 있어서, 상태 q1와 상태 q2에서는 모든 천이 문자에 대한 상태 천이의 종점이 같기 때문에, 상태 q1와 상태 q2를 병합한 qn=q1∪q2로 치환할 수 있다. 이들 두 가지의 경우 중 한쪽에 의해서 상태 또는 상태 천이가 삭제되면, 그것에 의해 다른 쪽에 의한 상태 또는 상태 천이의 삭제가 가능하게 되는 경우가 있기 때문에, 새롭게 상태 또는 상태 천이가 삭제되어 없어질 때까지 이들 두 가지를 반복한다.
도 20에 의해서, 단계 S106의 「용장 상태의 제거」의 수속에 대하여 설명한다. 본 수속에서는 변수 StateRemoved 및 TransitionRemoved를 이용한다. 변수 StateRemoved 및 TransitionRemoved는 TRUE 또는 FALSE 중 어느 하나의 값을 취할 수 있다.
우선, StateRemoved에 TRUE를 설정하고, 단계 SU02로 진행한다(단계 S1101).
수속 「용장인 상태 천이의 삭제」를 호출하고, 단계 S1103로 진행한다. 본 수속 중에서 TransitionRemoved가 설정된다(단계 S1102).
TransitionRemoved=FALSE 또한 StateRemoved=FALSE의 경우는 종료한다. 그 이외의 경우는 단계 S1104로 진행한다(단계 S1103).
수속 「용장인 상태의 병합」을 호출하고, 단계 S1105로 진행한다(단계 S1104).
TransitionRemoved=FALSE 또한 StateRemoved=FALSE의 경우는 종료한다. 그 이외의 경우는 단계 S1102로 진행한다(단계 S1105).
이상의 수순에 의해, 수속 「용장 상태의 제거」를 행할 수 있다.
또, 수속 「용장 상태의 제거」는, 상태 천이표를 저장하는 데 필요한 메모리 용량을 삭감하는 것을 목적으로 하고 있다. 따라서, 본 수속을 생략하더라도 수속 「입력 문서의 대조」를 실행하는 것은 가능하고, 생략함으로써, 「대조 조건의 컴파일」에 요하는 시간을 단축할 수 있다.
다음에, 단계 S1102의 수속 「용장인 상태 천이의 삭제」에 대하여 설명한다. 본 수속은, 「용장 상태의 제거」의 제 1 경우에 상당하고, 도 42에 나타내는 것 같은, σother에 의한 상태 천이와 동일한 종점의 상태를 가지는 상태 천이를 삭제한다.
도 21에 의해서, 단계 S1102의 수속 「용장인 상태 천이의 삭제」에 대하여 설명한다.
우선, 변수 TransitionRemoved를 FALSE로 설정하고, 단계 S1202로 진행한다 (단계 S1201).
다음에, t를 상태 천이 집합 T에 포함되는 최초의 상태 천이로 하고, 단계 S1203로 진행한다(단계 S1202).
상태 천이 집합 T에 포함되는 모든 상태 t를 처리한 경우는 종료한다. 그 이외의 경우는, 단계 S1204로 진행한다(단계 S1203).
Char(t)가 σother인 경우에는 단계 S1205로 진행한다. 그 이외의 경우는 단계 S1210로 진행한다(단계 S1204).
다음에, t1를 Source(t)을 기점으로 하는 최초의 상태 천이로 하고, 단계 S1206로 진행한다(단계 S1205).
Source(t)를 기점으로 하는 모든 상태 천이 t1를 처리한 경우는 단계 S1210로 진행한다. 그 이외의 경우는, 단계 S1207로 진행한다(단계 S1206).
t1≠t 또한 Destination(t1)=Destination(t)의 경우는 단계 S1208로 진행한다. 그 이외의 경우는 단계 S1209로 진행한다(단계 S1207).
상태 천이 t1를 상태 천이 집합 T에서 삭제하고, 단계 S1209로 진행한다(단계 S1208).
t1를 Source(t)을 기점으로 하는 다음 상태 천이로 하고, 단계 S1206로 진행한다(단계 S1209).
단계 S1204에서 Char(t)가 σother가 아니던 경우, 또는 단계 S1206에서 Source(t)를 기점으로 하는 모든 상태 천이 t1를 처리한 경우는, t을 상태 천이 집합 T에 포함되는 다음 상태 천이로 하고, 단계 S1203로 진행한다(단계 S1210).
이상의 수순에 의해, 수속 「용장인 상태 천이의 삭제」를 행할 수 있다.
다음에, 단계 1104의 수속 「용장인 상태의 병합」에 대하여 설명한다. 본 수속은, 「용장 상태의 제거」의 제 2 경우, 즉, 도 43에 나타내는 것 같은, 모든 천이 문자에 대한 상태 천이의 종점이 같은 복수의 상태를 병합한다.
단계 1104의 수속 「용장인 상태의 병합」은, 예컨대, 비특허문헌 1 등에 기재되어 있는 공지의 수순에 의해 실행 가능하다. 이 수순에 의해서, 하나 이상의 상태가 병합되었을 때는 변수 StateRemoved를 TRUE로 설정한다. 그 이외의 경우는 변수 StateRemoved를 FALSE로 설정한다.
다음에, 도 22에 의해 단계 S107의 「상태 천이표와 출력표의 생성」에 대하여 설명한다. 본 수속에서는, 상태 집합(25), 상태 천이 집합(26), 및 출력 기술 집합(27)으로부터, 상태 천이(11)와 출력 기술(12)을 취출하고, 각각 상태 천이표 저장부(4), 출력표 저장부(12)에 저장한다.
우선, 상태 집합 Q에 포함되고 있는 상태의 총수를 N이라고 할 때, 각 상태 q에 0~N-1의 일의의 상태 번호 StateId(q)를 대응시킨다(단계 S1301).
상태 천이 집합 T에서 최초의 상태 천이 t를 취출한다(단계 S1302).
상태 천이 집합 T에 포함되는 모든 상태 천이 t를 처리하면 단계 S1307로 진행한다. 그 이외의 경우는 단계 S1304로 진행한다(단계 S1303).
현 상태 Source(t), 입력 문자 Char(t)의 세트에 대하여 해쉬값 계산부(31)에서 해쉬값(32)을 계산하고, 단계 S1305로 진행한다(단계 S1304).
해쉬값(32)을 오프셋으로 하는 상태 천이 해쉬 포인터(33)에 현 상태 Source(t), 입력 문자 Char(t), 다음 상태 Destination(t)의 세트로 이루어지는 상태 천이 해쉬 체인(34)을 추가하고, 단계 S1306로 진행한다(단계 S1305).
t를 상태 천이 집합 T에 포함되는 다음 상태 천이로 하고, 단계 S1303로 진행한다(단계 S1306).
단계 S1303에서 상태 천이 집합 T에 포함되는 모든 상태 천이를 처리한 경우는, 출력 기술 집합으로부터 최초의 출력 기술 d를 출력한다(단계 S1307).
출력 기술 집합 D에 포함되는 모든 출력 기술 d를 처리하면 종료한다. 그 이외의 경우는 단계 S1309로 진행한다(단계 S1308).
State(d)의 상태 번호 StateId(State(d))에 대응하는 조건 번호 인덱스(41)에 조건 번호 체인(42)으로서 Result(d)를 추가하고 단계 S1310로 진행한다(단계 S1309).
d를 출력 기술 집합 D에 포함되는 다음 출력 기술로 하고, 단계 S1308로 진행한다(단계 S1310).
이상으로 나타낸 수순에 의해, 수속 「상태 천이표와 출력표의 생성」을 실행할 수 있다.
이어서, 도 23에 의해서, 수속 「입력 문서의 대조」에 대하여 설명한다.
우선, 상태 q에 초기 상태 q0를 설정하고, 단계 S2002로 진행한다(단계 S2001).
출력표 저장부(5)를 탐색하고, q에 관련되는 조건 번호(16)를 출력한다. 이 수순은, 조건 번호 인덱스(41)의 현 상태(13)의 상태 번호 StateId(q)에 대응하는 조건 번호 체인(42)으로의 포인터를 순서대로 탐색함으로써 실현된다. 모든 조건 번호 체인(42)의 탐색이 끝나면 단계 S2003로 진행한다(단계 S2002).
입력이 전부 종료하면 종료한다. 그 이외의 경우는 단계 S2004로 진행한다(단계 S2003).
입력 문자 판독부(7)로부터 다음 입력 문자(14)를 수취하여, σ로 하고, 단계 S2005로 진행한다(단계 S2004).
상태 천이표 저장부(4)를 탐색하여, 상태 q에서 천이 문자 σ에 의한 천이 목적지 qd이 존재하는지 여부, 즉, trans(q, qd, σ)∈T 되는 qd가 존재하는지 여부를 조사하고, 단계 S2006로 진행한다(단계 S2005).
천이 목적지 qd이 존재하는 경우는 단계 S2007로 진행한다. 그 이외의 경우는 단계 S2008로 진행한다(단계 S2006).
q에 qd를 설정하고, 단계 S2002로 진행한다(단계 S2007).
단계 S2006에서 qd가 존재하지 않는 경우는, 상태 q로부터 천이 문자 σother에 의한 천이 목적지 qd이 존재하는지 여부, 즉, trans(q, qd, σother)∈T 되는 qd가 존재하는지 여부를 조사하고, 단계 S2009로 진행한다(단계 S2008).
천이 목적지 qd이 존재하는 경우는 단계 S2007로 진행한다. 그 이외의 경우는 단계 S2010로 진행한다(단계 S2009).
상태 q에 q0를 설정하고, 단계 S2006로 진행한다.
이상의 수순에 의해, 수속 「입력 문서의 대조」를 행할 수 있다.
이하, 도 44에 나타내는 대조 조건(2)과 도 54에 나타내는 입력 문자열의 경우를 예로 들어, 본 실시예의 문자열 대조 장치의 동작을 설명한다. 도 44의 대조 조건은 특허문헌 3에 도시되고 있었던 도 52의 대조 조건의 표기를 본 실시예의 형식에 맞춘 것이며, 도 52와 논리적으로 등가인 대조 조건이다.
단계 S51에 나타낸 수속 「대조 조건 컴파일」을 실행함으로써, 도 44의 대조 조건(2)으로부터, 도 45에 나타내는 상태 천이표와, 도 46에 나타내는 출력표가 생성된다. 또, 초기 상태의 상태 번호를 O으로 한다.
도 45의 상태 천이표는 상태 천이표 저장부(4)에 저장되는 현 상태(13), 입력 문자(14)에 대한 다음 상태(15)를 표로 표현한 것이며, 예컨대, 현 상태의 상태 번호가 6이고 입력 문자 「d」일 때, 다음 상태는 10으로 되는 것을 나타내고 있다. 도면 중에서 「-」는, 다음 상태(15)가 존재하지 않는 것을 나타내고 있어, 이러한 조합에 대해서는 상태 천이표 저장부(4)는 메모리를 소비하지 않고 저장할 수 있다. 종래의 출력 첨부 유한 상태 오토마톤에서는 도 53에 나타내는 바와 같이, 90개의 조합을 필요로 하는 데 비하여, 도 45의 예에서는, 46개의 상태 천이에 관하여 정보를 저장하면 좋고, 상태 천이표를 저장하는 데 필요한 메모리를 삭감한다고 하는 효과가 얻어지고 있다.
도 46의 출력표는 출력표 저장부(5)에 저장되는 현 상태(13)에 대응하는 조건 번호(16)의 집합을 표로 표현한 것이며, 예컨대, 현 상태가 4일 때, 조건 번호 0을 출력하는 것을 나타내고 있다.
일례로서 입력 문자열 「aaca」를 입력으로 한 경우의 동작을 도 47에 나타낸다. 우선, 상태 q를 초기 상태(상태 0)로 설정한다. 이어서 1문자째의 문자 「a」를 읽고, 상태 0에 있어서의 문자 「a」의 천이 목적지인 상태 2로 천이한다. 문자 「a」에 의한 천이 목적지가 정의되어 있기 때문에 σother의 참조는 불필요하며, 이것을 도 47 중에서는 (불필요)로 표기하고 있다. 다음에, 2문자째의 문자 「a」를 읽어, 상태 2에 있어서의 문자 「a」의 천이 목적지인 상태 5로 천이한다. 다음에, 3문자째의 문자 「c」를 읽어, 상태 5에 있어서의 문자 「c」의 천이 목적지인 상태 9로 천이한다. 다음에, 4문자째의 문자 「a」를 읽어, 상태 9에 있어서의 문자 「a」의 천이 목적지인 상태 12로 천이한다. 여기서 입력이 종료한다.
특허문헌 3에 기재된 종래의 기술에서는 동등의 조건에 대하여 7회의 상태 천이표의 참조를 필요로 하고 있었지만, 본 실시예에서는 4회에서 끝난다. 이와 같이, 본 발명에 의하면, 천이의 실패에 의한 상태 천이표의 참조 회수를 1문자당 2회 이하로 하여, 천이의 실패가 반복되는 것에 의한 성능 저하를 방지하여, 고속인 문자열 대조를 가능하게 하는 것을 목적으로 한다.
또, 도 44의 대조 조건은, 특허문헌 3에 기재된 기술과의 비교를 위해 기재한 것이지만, 초기 상태로부터 모든 문자에 의한 천이가 가능하다고 하는 특수한 조건을 가지고 있다. 도 44의 대조 조건의 목적으로 하는 것은 대조 대상 문자열 「abcd」 중 한 문자가 변화되더라도 그 문자열을 검출할 수 있도록 하는 일이지만, 그 목적 및 대조 조건의 의미를 거의 변경하지 않고 도 48의 대조 조건으로 변환할 수 있다. 이러한 경우에는, 상태 천이에 필요한 메모리를 더 삭감하여, 본 실시예의 효과를 보다 발휘할 수 있다.
단계 S51에 나타낸 수속 「대조 조건 컴파일」을 실행함으로써, 도 48의 대조 조건(2)으로부터, 도 49에 나타내는 상태 천이표와, 도 50에 나타내는 출력표가 생성된다. 또, 초기 상태의 상태 번호를 O으로 한다.
도 49의 상태 천이표의 의미는 도 45와 마찬가지고, 상태 천이표 저장부(4)에 저장이 필요한 상태 천이의 수는 23개로 삭감되어, 필요한 메모리를 더 삭감한다고 하는 효과가 얻어지고 있다.
또한, 도 48의 대조 조건(2)에 대하여, 입력 「xabxd」에 대한 동작을 도 51에 나타낸다. 상태 0에 있어서 1문자째의 「x」의 천이 목적지는 정의되어 있지 않기 때문에, σother를 참조하지만, 그것에서도 천이 목적지가 정의되어 있지 않기 때문에 다음 상태는 초기 상태, 즉 상태 0으로 한다. 이 때 상태 천이표의 참조는 2회 행하여진다. 이하, 2문자째의 「a」에서 상태 3, 3문자째의 「b」에서 상태 6으로 천이한다. 4문자째의 「x」에서는, 「x」의 천이 목적지는 정의되어 있지 않 으므로, σother를 참조하여, 다음 상태 1을 얻는다. 이 때 상태 천이표의 참조는 2회이다. 또한, 5문자째의 「d」에서 상태 2로 천이한다. 상태 2는 출력으로 되는 조건 번호(16)로서 번호 0이 존재하고 있기 때문에, 이것을 출력한다. 이 경우, 상태 천이표의 참조 회수는 7회로 된다.
또, 비특허문헌 1 등에 기술되어 있듯이, 출력을 가지지 않는 일반의 DFA는, 출력 알파벳으로서 「수리했다」「수리하지 않는다」라고 하는 두 가지의 정보를 출력하는 특수한 무어(Moore) 기계라고 간주할 수 있다. 본 실시예에서도, 단지 대조 결과에 조건 번호가 존재하는지 여부를 판정함으로써, 「수리했다」「수리하지 않는다」라고 하는 두 가지의 정보를 출력하는 문자열 대조 장치를 구성할 수 있다.
또, 이상의 실시예에서는, 입력 및 대조의 대상은 「문자」인 것으로 하여 왔지만, 「문자」는 인간에게 판독 가능한 문자열에 한정되지 않고, 임의의 기호열, 데이터열에 대하여 적용이 가능하다. 예컨대 유전자 배열이나 센서 등에 의해 계측된 데이터의 식별에 적용하더라도 좋다.
또, 이상의 실시예에서는, 상태 천이표 저장부(4)에 상태 천이 해쉬표(35)를 사용하는 것으로 했지만, 배열, 트리 구조 등 2차원 구조의 표를 논리적으로 표현 가능한 어떠한 데이터 구조에 의해 실현하더라도 좋다.
또한, 초기 상태 등 사용 빈도가 높은 상태에 대해서는 액세스 속도가 고속인 배열 등의 데이터 구조를 사용하고, 사용 빈도가 낮은 상태에 대해서는 메모리 용량의 효율이 높은 해쉬표나 트리 구조 등의 데이터 구조를 병용하더라도 좋다.
또, 이상의 실시예에서는, 출력표 저장부(5)에 조건 번호 인덱스(41)를 사용하는 것으로 했지만, 트리 구조나 해쉬표 등, 1차원 구조의 표를 논리적으로 표현 가능한 어떠한 데이터 구조에 의해서 실현하더라도 좋다.
정규 표현으로 기술된 대조 조건에 근거하여 상태 천이표를 생성하는 상태 천이표 생성부와, 상기 상태 천이표 생성부에 의해 생성된 상태 천이표에 근거하여 천이하는 오토마톤을 구비하고, 또한, 상기 오토마톤은, 상기 대조 조건에 근거하여 생성된 상태 천이표에 있어서, 현 상태와 입력 문자의 세트에 대한 다음 천이 목적지 상태가 존재하지 않는 경우, 입력 문자를 판독하지 않고 초기 상태로 천이함으로써, 상태 천이표를 저장하는 데 필요한 기억 용량을 삭감할 수 있다.