(57)【要約】【課題】相対アドレス関数決定情報のビット数を低減して記憶効率を高めるとともに、高速処理を可能にする。【解決手段】アドレス０６の１ワードに、現・次状態情報として、現状態を示すベースアドレスＡ１と、次状態への遷移のための、ベースアドレスＡ１からの相対アドレスＢ＊２S＋ＯＦＳを求める関数を決定する情報である８ビットのＭＡＳＫ、８ビットのＣＭＮ／ＤＣ及び１６ビットのＢＩＴＭＡＰを格納する。ＧＯＴＯ遷移文字セットの共通部ビット数をＣＬとすると、ＣＬ＞４のとき、Ｓ＝４−ＣＬ、Ｂは、ＢＩＴＭＡＰ上の、ＧＯＴＯ遷移文字の非共通部上位４ビットをデコードしたときのセットビットに対応する位置より下位側のセットビットの個数ｎ、ＯＦＳはこのＧＯＴＯ遷移文字の非共通部から上位４ビットを除いた部分であり、ＣＬ≦４のときは、Ｓ＝０、Ｂは該個数ｎ、ＯＦＳ＝０である。【選択図】図５０
2009119802.tif 000002
【特許請求の範囲】
【請求項１】
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトンのメモリ内データ構造において、
１ワードに格納される、該現状態を示すベースアドレスと次状態への相対アドレス関数決定情報とを含む現・次状態情報を有し、該相対アドレス関数決定情報は、該入力文字がＧＯＴＯ遷移文字セットの共通部と一致しているか否かを判定するための共通部一致判定情報と該ＧＯＴＯ遷移文字セットから少なくとも該共通部を除いた部分である非共通部のいずれかを該入力文字が含んでいるか否かを判定するための非共通部存否情報とを含み、
該入力文字と該相対アドレス関数決定情報とで定まる相対アドレスと該ベースアドレスとの和又は差に対応したアドレスの１ワードに格納される、次の現・次状態情報を有する、
ことを特徴とする有限オートマトンのメモリ内データ構造。
【請求項２】
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトンのメモリ内データ構造において、
１ワードに格納される、アドレスモードと該アドレスモードに応じたベースアドレス又は相対ベースアドレスと次状態への相対アドレス関数決定情報とを含む現・次状態情報を有し、該ベースアドレスは該現状態を示し、該相対ベースアドレスと該１ワードのアドレスとの和又は差に対応した値がベースアドレスに等しく、該相対アドレス関数決定情報は、該入力文字がＧＯＴＯ遷移文字セットの共通部と一致しているか否かを判定するための共通部一致判定情報と該ＧＯＴＯ遷移文字セットから少なくとも該共通部を除いた部分である非共通部のいずれかを該入力文字が含んでいるか否かを判定するための非共通部存否情報とを含み、該非共通部存否情報のビット長は該アドレスモードが該相対ベースアドレスを示すときの方が該ベースアドレスを示すときよりも大きく、
該入力文字と該相対アドレス関数決定情報とで定まる相対アドレスと該ベースアドレスとの和又は差に対応したアドレスの１ワードに格納される、次の現・次状態情報を有する、
ことを特徴とする有限オートマトンのメモリ内データ構造。
【請求項３】
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトンのメモリ内データ構造において、
該現状態を示すベースアドレスに格納される、該入力文字がＧＯＴＯ遷移文字セットの共通部と一致しているか否かを判定するための共通部一致判定情報と該ＧＯＴＯ遷移文字セットから少なくとも該共通部を除いた部分である非共通部のいずれかを該入力文字が含んでいるか否かを判定するための非共通部存否情報とを含む相対アドレス関数決定情報と、
該入力文字と該相対アドレス関数決定情報とで定まる相対アドレスと該ベースアドレスとの和又は差に対応したアドレスに格納される、該次状態を示すベースアドレスと、
を有することを特徴とする有限オートマトンのメモリ内データ構造。
【請求項４】
該共通部一致判定情報は、該共通部の各ビット位置を示すマスクＭＡＳＫを含む、
ことを特徴とする請求項１乃至３のいずれかに記載の有限オートマトンのメモリ内データ構造。
【請求項５】
該マスクＭＡＳＫは、該ＧＯＴＯ遷移文字セットを構成する文字が１個であるとき、各ビットが共通値であることを示す、
ことを特徴とする請求項４に記載の有限オートマトンのメモリ内データ構造。
【請求項６】
該共通部一致判定情報は、該共通部の各ビット位置に対応した値を示すコモンＣＭＮを
含む、
ことを特徴とする請求項５に記載の有限オートマトンのメモリ内データ構造。
【請求項７】
該コモンＣＭＮは、該非共通部の各ビット位置に対応した値が第１値である、
ことを特徴とする請求項６に記載の有限オートマトンのメモリ内データ構造。
【請求項８】
該ＧＯＴＯ遷移文字セットを構成する文字が０個であるとき、
該マスクＭＡＳＫは、各ビットが共通値でないことを示し、該コモンＣＭＮは、各ビットが第２値である、
ことを特徴とする請求項７に記載の有限オートマトンのメモリ内データ構造。
【請求項９】
該非共通部存否情報は、非共通部のビット長がＮＣＬであるとき、ＮＣＬ＞ＮであればＮビット、ＮＣＬ≦ＮであればＮＣＬビットの各値に対応した、ＧＯＴＯ遷移存否を示すビットからなる２Nビットの非共通部ビットマップを含み、
ここにＮは１＜Ｎ＜ＩＳＬを満たす整数であり、ＩＳＬは入力文字のビット長であることを特徴とする請求項６乃至８のいずれか１つに記載の有限オートマトンのメモリ内データ構造。
【請求項１０】
該非共通部ビットマップは、該ＧＯＴＯ遷移文字セットを構成するそれぞれの文字の該非共通部を上位ＮＣＬビットとし下位（ＩＳＬ−ＮＣＬ）ビットの各ビット値を該第１値とするＩＳＬビットの、それぞれの上位Ｎビットをデコードしたものの論理和である、
ことを特徴とする請求項９に記載の有限オートマトンのメモリ内データ構造。
【請求項１１】
該相対アドレスは、ブロックナンバをＢ、ブロックサイズ指数をＳ、ブロック内オフセットをＯＦＳと表記したとき、Ｂ＊２S＋ＯＦＳ＋（定数）と表され、ここに、
ブロックナンバＢは、該非共通部ビットマップ内の存在有を示すビット値のそれぞれについて、そのビット位置から該非共通部ビットマップの一端側までに含まれる、存在有を示すビット値の個数より１小さい値であり、
ブロックサイズ指数Ｓは、ＮＣＬ＞ＮのときＳ＝ＮＣＬ−Ｎ、そうでないときＳ＝０であり、
ブロック内オフセットＯＦＳは、ＮＣＬ＞Ｎのとき、該非共通部から該Ｎビットを除いた部分に対応した値であり、そうでないとき０である、
ことを特徴とする請求項９又は１０に記載の有限オートマトンのメモリ内データ構造。
【請求項１２】
請求項１乃至１１のいずれか１つに記載のデータ構造のデータが格納されていることを特徴とするメモリ。
【請求項１３】
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトン実行装置において、
請求項１に記載のデータ構造の情報が格納されるメモリと、
該入力文字と、該メモリの指定アドレスから読み出された現・次状態情報に含まれる相対アドレス関数決定情報とに基づいて、この現・次状態情報に含まれるベースアドレスに対する相対アドレスを求める相対アドレス算出手段と、
該読み出されたベースアドレスと該求められた相対アドレスとの和又は差に対応したアドレスを、該メモリに対し指定して、次の現・次状態情報を読み出させる、という処理を繰り返すメモリ読出制御手段と、
を有することを特徴とする有限オートマトン実行装置。
【請求項１４】
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトン実行装置において、
請求項２に記載のデータ構造の情報が格納されるメモリと、
該入力文字と、該メモリの指定アドレスから読み出された現・次状態情報に含まれる相
対アドレス関数決定情報とに基づいて、この現・次状態情報に含まれるベースアドレス又は相対ベースアドレスに対する相対アドレスを求める相対アドレス算出手段と、
該読み出されたベースアドレスと該求められた相対アドレスとの和に対応したアドレス又は、該読み出された相対ベースアドレスと読み出しアドレスと該求められた相対アドレスとの和に対応したアドレスを、該メモリに対し指定して、次の現・次状態情報を読み出させる、という処理を繰り返すメモリ読出制御手段と、
を有することを特徴とする有限オートマトン実行装置。
【請求項１５】
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトン実行装置において、
請求項３に記載のデータ構造の情報が格納されるメモリと、
該入力文字と、該メモリの指定アドレスから読み出された相対アドレス関数決定情報とに基づいて、相対アドレスを求める相対アドレス算出手段と、
該メモリに対し、該指定アドレスと該相対アドレスとの和又は差に対応したアドレスを指定することにより、次状態を示すベースアドレスを読み出させ、次いで該次状態を示すベースアドレスを指定することにより、次の相対アドレス関数決定情報を読み出させる、という処理を繰り返すメモリ読出制御手段と、
を有することを特徴とする有限オートマトン実行装置。
【請求項１６】
該相対アドレス算出手段は、該共通部一致判定情報に基づいて、該入力文字が該共通部を含んでいるか否かを判定し、否定判定した場合には、ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスを求める、
ことを特徴とする請求項１３乃至１５のいずれか１つに記載の有限オートマトン実行装置。
【請求項１７】
該共通部一致判定情報は、該共通部の各ビット位置を示すマスクＭＡＳＫと、該共通部の各ビット位置に対応した値を示すコモンＣＭＮと、を有し、
該相対アドレス算出手段は、該入力文字のうち該マスクＭＡＳＫが示す共通部が該コモンＣＭＮの対応する部分と一致するとき、該入力文字が該共通部を含んでいると判定する、
ことを特徴とする請求項１６に記載の有限オートマトン実行装置。
【請求項１８】
該非共通部存否情報は、Ｍビットの各値に対応した、ＧＯＴＯ遷移文字存否を示すビットで構成された非共通部ビットマップを含み、ここにＭは、該非共通部のビット長がＮＣＬであるとき、ＮＣＬが所定値Ｎより大であればＮに等しく、そうでなければＮＣＬに等しく、Ｎは１＜Ｎ＜ＩＳＬを満たし、ＩＳＬは該入力文字のビット長であり、
該相対アドレス算出手段は、該入力文字の、該非共通部のＭビットに対応する部分の値で示される、該非共通部ビットマップ上の１ビットが、存在有を示しているか否かを判定し、否定判定した場合には、該ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスを求める、
ことを特徴とする請求項１６又は１７に記載の有限オートマトン実行装置。
【請求項１９】
該非共通部ビットマップは２Nビットであることを特徴とする請求項１８に記載の有限オートマトン実行装置。
【請求項２０】
該ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスは、所定値である、
ことを特徴とする請求項１６乃至１８のいずれか１つに記載の有限オートマトン実行装置。
【請求項２１】
該相対アドレス算出手段は、該ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスを求めない場合、ブロックナンバをＢ、ブロックサイズ指数をＳ、ブロック内オフセットをＯＦＳと表記したとき、Ｂ＊２S＋ＯＦＳ＋（定数）の値を相対アドレスとして求め、ここに、
該ブロックナンバＢは、該入力文字のうち、該非共通部かつ該所定Ｎビット以内の部分に対応したものの値で示される、該非共通部ビットマップ上の位置から一端までに含まれる、存在有を示すビット値の個数より１小さい値であり、
該ブロックサイズ指数Ｓは、ＮＣＬ＞ＮのときＳ＝ＮＣＬ−Ｎ、そうでないときＳ＝０であり、
該ブロック内オフセットＯＦＳは、ＮＣＬ＞Ｎのとき、該入力文字の該非共通部に対応する部分から該Ｎビットを除いた部分で定まる値であり、そうでないとき０である、
ことを特徴とする請求項１８乃至２０のいずれか１つに記載の有限オートマトン実行装置。
【請求項２２】
該現・次状態情報はさらに、現状態が出力状態であるか否かを示す出力状態情報を含み、
カウンタと、
文字列が保持されるキューと、
該キューから次の文字を入力文字として出力させるとともに該カウンタをインクリメントさせる制御手段と、
をさらに有することを特徴とする請求項２１に記載の有限オートマトン実行装置。
【請求項２３】
該現・次状態情報はさらに、該入力文字を次状態に持ち越すか否かを示す文字消費情報を含み、
該制御手段は、該メモリから読み出された該文字消費情報が該持ち越しを示している場合、該キューの出力及び該カウンタの内容をそのまま維持させる、
ことを特徴とする請求項２２に記載の有限オートマトン実行装置。
【請求項２４】
該相対アドレス算出手段は、
該共通部一致判定情報が示す該共通部が該入力文字に含まれているか否かを判定する共通部不一致判定回路と、
該共通部不一致判定回路が否定判定した場合に、ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスを出力する出力回路と、
を有することを特徴とする請求項１３乃至１５のいずれか１つに記載の有限オートマトン実行装置。
【請求項２５】
該非共通部存否情報は、２NビットのそれぞれがＧＯＴＯ遷移存否を示す非共通部ビットマップを含み、ここにＮは１＜Ｎ＜ＩＳＬを満たす整数の所定値であり、ＩＳＬは該入力文字のビット長であり、
該相対アドレス算出手段はさらに、
該非共通部に対応するビットを該入力文字から抽出し、該非共通部のビット長ＮＣＬが該所定値Ｎより大であれば該非共通部に対応するビットのうちＮビットをブロックＢＬＫとし残りの（ＮＣＬ−Ｎ）ビットをブロック内オフセットＯＦＳとし（ＮＣＬ−Ｎ）をブロックサイズＳとして出力し、そうでなければ該非共通部に対応するビットを該ブロックＢＬＫとし該ブロック内オフセットＯＦＳを０とし該ブロックサイズを０として出力する非共通部抽出・分割回路と、
該非共通部ビットマップ上の、該ブロックＢＬＫの値に対応した位置のビットが、第１値であるか否かを判定する不存在判定回路を備えた非共通部処理回路と、
を有し、
該出力回路はさらに、該不存在判定回路が肯定判定した場合に該ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスを出力する、
ことを特徴とする請求項２４に記載の有限オートマトン実行装置。
【請求項２６】
該出力回路は、
第１入力端と第２入力端とを備え、該第１入力端に固定値が供給されるセレクタと、
該共通部不一致判定回路が否定判定し又は該不存在判定回路が否定判定した場合に該セレクタに対し該第１入力端の値を、該ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスとして選択的に出力させる選択制御回路と、
を有することを特徴とする請求項２５に記載の有限オートマトン実行装置。
【請求項２７】
該非共通部処理回路はさらに、
該ブロックＢＬＫをデコードする第１デコーダと、
該第１デコーダの出力が示す、該非共通部ビットマップ上の位置から該非共通部ビットマップの一端までに含まれる第２値のビットの個数より１だけ小さい値をブロックナンバＢとして求めるブロックナンバ検出回路と、
を有することを特徴とする請求項２６に記載の有限オートマトン実行装置。
【請求項２８】
該出力回路はさらに、該ブロックナンバＢ、該ブロックサイズ指数Ｓ及び該ブロック内オフセットＯＦＳに基づき、Ｂ＊２S＋ＯＦＳ＋（定数）を求めて、該セレクタの第２入力端に供給する演算回路を有し、
該選択制御回路は、該共通部不一致判定回路が肯定判定し且つ該不存在判定回路が肯定判定した場合に該セレクタに対し該第２入力端の値を、遷移先に対応した相対アドレスとして選択的に出力させる、
ことを特徴とする請求項２７に記載の有限オートマトン実行装置。
【請求項２９】
該共通部一致判定情報は、該共通部の各ビット位置を示すマスクＭＡＳＫと、該共通部の各ビット位置に対応した値を含むコモンＣＭＮとを有し、
該共通部不一致判定回路は、該入力文字と該マスクＭＡＳＫとの論理積が該コモンＣＭＮと一致するとき該入力文字に該共通部が含まれていると判定する、
ことを特徴とする請求項２８に記載の有限オートマトン実行装置。
【請求項３０】
該共通部一致判定情報は、該共通部の各ビット位置を示すマスクＭＡＳＫと、該共通部の各ビット位置に対応した値を含むコモンＣＭＮとを有し、
該共通部不一致判定回路は、該入力文字と該マスクＭＡＳＫとの論理積と、該コモンＣＭＮと該マスクＭＡＳＫとの論理積とが一致するとき、該入力文字に該共通部が含まれていると判定する、
ことを特徴とする請求項２８に記載の有限オートマトン実行装置。
【請求項３１】
該マスクＭＡＳＫと該コモンＣＭＮとが全ビット不一致であるか否かを判定する全ビット不一致判定回路をさらに有し、
該選択制御回路はさらに、該全ビット不一致判定回路が肯定判定した場合にも、該セレクタに対し該第１入力端の値を、該ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスとして選択的に出力させる、
ことを特徴とする請求項２９又は３０に記載の有限オートマトン実行装置。
【請求項３２】
該マスクＭＡＳＫと該コモンＣＭＮとが全ビット不一致であるか否かを判定する全ビット不一致判定回路をさらに有し、
該セレクタはさらに、固定値が供給される第３入力端を有し、
該選択制御回路はさらに、該全ビット不一致判定回路が肯定判定した場合には優先的に、該セレクタに対し該第３入力端の値を、該ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスとして選択的に出力させる、
ことを特徴とする請求項２９又は３０に記載の有限オートマトン実行装置。
【請求項３３】
該相対アドレス関数決定情報はさらに、該入力文字から該共通部及び該非共通部に対応
する部分を除いた部分であるドント・ケア部の情報を含み、
該ドント・ケア部の情報は、該コモンＣＭＮの該ドント・ケア部に対応する各ビットが該第２値であることに対応しており、
該マスクＭＡＳＫと該コモンＣＭＮとの論理和を合成マスクＣＭＡＳＫとして求めるＯＲ回路をさらに有し、
該非共通部抽出・分割回路は、該入力文字から、該合成マスクＣＭＡＳＫに含まれる該第１値のビットを、該非共通部に対応するビットとして抽出する、
ことを特徴とする請求項３０に記載の有限オートマトン実行装置。
【請求項３４】
該非共通部抽出・分割回路は、該入力文字の該非共通部を上位ＮＣＬビットとし下位（ＩＳＬ−ＮＣＬ）ビットの各ビット値を該第１値とするＩＳＬビットの、上位ＮビットをブロックＢＬＫとして求め、下位（ＩＳＬ−Ｎ）ビットのビット位置を逆順にしたものをブロック内オフセットＯＦＳとして求める、
ことを特徴とする請求項２５乃至３３のいずれか１つに記載の有限オートマトン実行装置。
【請求項３５】
該非共通部抽出・分割回路は、
クロック入力端にクロックが供給され、該入力文字が保持される第１シフトレジスタと、
クロック入力端に該クロックが供給され、該マスクＭＡＳＫ又は該合成マスクＣＭＡＳＫが保持される第２シフトレジスタと、
該第２シフトレジスタのシリアル出力端と該クロックとの論理積に対応したものを出力する第１論理回路と、
クロック入力端に該第１論理回路の出力が供給され、シリアル入力端が該第１シフトレジスタのシリアル出力端に接続された第３シフトレジスタと、
を有し、該第３シフトレジスタの上位Ｎビットから該ブロックＢＬＫが取り出され、該第３シフトレジスタの下位（ＩＳＬ−Ｎ）ビットのビット位置を逆順にしたものが該ブロック内オフセットＯＦＳとして取り出される、
ことを特徴とする請求項３４に記載の有限オートマトン実行装置。
【請求項３６】
該非共通部抽出・分割回路はさらに、
該第１論理回路の出力パルスをカウントする第１カウンタと、
該第１カウンタのカウントＣＮが該所定値Ｎより大であるか否かを判定する比較回路と、
該比較回路が肯定判定しているときに該第１論理回路の出力パルスを通過させる第２論理回路と、
該第２論理回路の出力パルスをカウントする第２カウンタと、
を備え、該第２カウンタの計数値を該ブロックサイズ指数Ｓとして出力するブロックサイズ指数検出回路を有することを特徴とする請求項３５に記載の有限オートマトン実行装置。
【請求項３７】
該非共通部抽出・分割回路は、
該マスクＭＡＳＫ又は該合成マスクＣＭＡＳＫ上の、一方側最端を除く各ビットについて、その一方側隣のビットから該一方側最端ビットまでの該第２値の個数を求める一方側第２値個数検出回路と、
該マスクＭＡＳＫ又は該合成マスク上の該第１値に対応する、該入力文字の一方側最端を除く（ＮＣＬ−１）ビットの各々について、該求められた対応する該第２値の個数だけこのビットをシフトさせたものを出力し、（ＩＳＬ−ＮＣＬ）ビットのそれぞれを該第１値にして他方側へ追加出力するとともに、該マスクＭＡＳＫ又は該合成マスク上の一方側最端が該第１値であれば該入力文字の一方側最端のビットを出力するデマルチプレクサ群
と、
を有し、これらＩＳＬビットの出力のうち一方側Ｎビットを該ブロックＢＬＫとし、残り（ＩＳＬ−Ｎ）ビットのビット位置を逆順にしたものを該ブロック内オフセットＯＦＳとする、
ことを特徴とする請求項３４に記載の有限オートマトン実行装置。
【請求項３８】
該非共通部抽出・分割回路はさらに、
該マスクＭＡＳＫ又は該合成マスク上の該第１値をカウントする並列カウンタと、
該並列カウンタのカウントＣＮ０と−Ｎとの和を求める加算回路と、
第１入力端に該加算回路の出力ＣＮ０−Ｎが供給され、第２入力端に０が供給され、該加算回路の符号ビットが負であることを示していれば該第２入力端の値を該ブロックサイズ指数Ｓとして選択的に出力し、そうでなければ該第１入力端の値を該ブロックサイズ指数Ｓとして選択的に出力するセレクタと、
を備えたブロックサイズ指数検出回路を有することを特徴とする請求項３７に記載の有限オートマトン実行装置。
【請求項３９】
該ブロックナンバ検出回路は、
該第１デコーダの出力が入力され、該第２値を一端側へ尾引させたものを実質的に該一端側へ１ビットシフトさせる第２値尾引１ビット一端側シフト回路と、
該非共通部ビットマップから、該第２値尾引１ビット一端側シフト回路の出力の該第２値に対応する部分を抽出する論理回路と、
該論理回路の出力に含まれる該第２値をカウントし、その結果をブロックナンバＢとして出力する並列カウンタと、
を有することを特徴とする請求項２７乃至３３のいずれか１つに記載の有限オートマトン実行装置。
【請求項４０】
該演算回路は、
出力レジスタと、
該ブロックサイズ指数Ｓをデコードする第２デコーダと、
該出力レジスタの最下位側からＮビットのそれぞれに対応して備えられ、それぞれ該ブロックナンバＢの対応するビットがデータ入力端に供給され、０〜Ｎの範囲内で該第２デコーダの出力に応じたビット数だけ、それぞれ該出力レジスタの対応するビットから上位側へシフトさせて該出力レジスタに供給するデマルチプレクサ群と、
該デマルチプレクサ群の出力と衝突しないようにして、（ＮＣＬ−Ｎ）ビットのブロック内オフセットＯＦＳのそれぞれを、該該出力レジスタの最下位側から対応するビットに供給するゲート回路と、
を有することを特徴とする請求項２８乃至３３のいずれか１つに記載の有限オートマトン実行装置。
【請求項４１】
該メモリ読出制御手段は、
該メモリに対しアドレスを指定するレジスタと、
該レジスタの入力値と出力値とを比較する比較回路と、
を有し、該和又は差に対応したアドレスを求めた後に、該比較回路の出力が一致を示していれば、該メモリから次の現・次状態情報を読み出させずに、該相対アドレス算出手段に対し、既に読み出されている現・次状態情報を再利用させる、
ことを特徴とする請求項１３乃至４０のいずれか１つに記載の有限オートマトン実行装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、現状態と入力文字とに基づいて次状態へ遷移する有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置に係り、例えばウイルススキャン、メールフィルタリング、ＵＲＬフィルタリング、ＸＭＬファイルのパース、データマイニング、テキストマイニング、パケットルーティング、遺伝子解析、コンパイラ、文章の文法解析又は情報検索等に用いられる有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置に関する。
【背景技術】
【０００２】
インターネットの普及に伴い、スパムメールやファイルへのウイルス感染による被害が増大しており、メールサーバーでは大量のメール及びメール添付ファイルに対しメールフィルタリング及びウイルスチェックを高速に行う必要がある。【０００３】
ウイルススキャンは、シグネチャーと呼ばれる可変長パターンの検索処理であり、平均１００〜１５０バイトのシグネチャーが約１０万種類存在すると言われている。【０００４】
この検索でのパターンマッチングは、有限オートマトンを用いて行うことができる。有限オートマトンでは、現状態と入力文字（input symbol）とで次状態が定まり、これが繰り返し行われてキーワード（パターン）が検出される。ウイルススキャンの場合、文字は例えば１バイトであり、文字列（a string of symbols）中に、多数の、キーワードとしてのシグネチャーのどれが含まれているかのパターンマッチング処理を、１つの有限オートマトンで表すことができる（Ａｈｏ−Ｃｏｒａｓｉｃｋ法）。ここに、「文字」は所定ビット長の任意のコードである。【０００５】
この方法は、メモリに有限オートマトンを格納しておき、現状態を示すベースアドレスＢＡＤＤＲと入力文字ＩＳとをアドレスＡＤＤＲ＝ＢＡＤＤＲ＋ＩＳとしてメモリから次状態を読み出すという処理を繰り返すことにより、実施される。【０００６】
図１の上部は、通常のメモリに有限オートマトンを格納した状態を示す。左端の列は、下位８ビットを除く、１６進表記のベースアドレスＢＡＤＤＲであり、状態番号を示している。上端の行は、下位８ビットの、１６進表記の下位アドレスＬＡを示しており、任意の文字に対応している。例えば、ベースアドレスＢＡＤＤＲがＡ８８で入力文字ＩＳが０２である場合、アドレスＡＤＤＲ＝ＢＡＤＤＲ＋ＩＳ＝Ａ８８０２をメモリに対し指定することにより、次状態を示すＢＡＤＤＲ＝Ａ１０００が読み出される。このような処理が順次行われて、キーワード検出が行われる。【０００７】
図１の上部において、空欄はＦＡＩＬＵＲＥ遷移先のベースアドレス、例えば初期状態を示すベースアドレスが格納されている。ＦＡＩＬＵＲＥ遷移先は、各行について共通である。空欄以外の次状態（ＧＯＴＯ遷移先）は、２５６エントリー中、数エントリーであり、ＧＯＴＯ遷移の記憶効率が極めて低く、キーワード数が多いと通常のメモリは実用的でない。【０００８】
この問題を解決するため、例えば下記特許文献１に開示されているように、従来ではＣＡＭ（Content Addressable Memory）が用いられていた。【０００９】
しかし、ＣＡＭメモリは、現状態ＢＡＤＤＲと入力文字ＩＳとの組を、全記憶内容のそれぞれと比較して、一致するもののアドレスを出力する構成であるため、消費電力が比較的大きく、チップ面積に対する記憶密度が低く、かつ、高価である。【００１０】
そこで、下記非特許文献１には、１バイトの入力文字に対し２５６ビットのビットマップを用い、その各ビットをＧＯＴＯ遷移文字と対応付け、ビットマップ上の、入力文字に対応する位置のビットが、‘０’であればＦＡＩＬＵＲＥ遷移、‘１’であればＧＯＴＯ遷移と判定し、後者の場合、そのビット位置の前までのセットビットをカウントし、その値をシングルポインタ（ベースアドレス）からのオフセットアドレス（相対アドレス）として次の状態へ遷移し、このようなデータ構造をＳＲＡＭに格納することが開示されている。【００１１】
しかしながら、ビットマップを用いる方法は、入力文字が例えば８ビットで１ワードが３２ビットである場合、現状態からの遷移文字の個数によらず、２５６ビット＝３２ビット×８ワードのビットマップが、相対アドレス関数決定情報（入力文字に対する相対アドレスの関数を決定する情報）として必要になる。一方、有限オートマトンでは一般に、初期状態から離れると、１個のＧＯＴＯ遷移とその他のＦＡＩＬＵＲＥ遷移となる確率が高い。このため、ビットマップが長くなり過ぎ、記憶効率が悪くなる。入力文字がアルファベットに限定されるような場合にはビットマップのビット数を少なくできるが、漢字コードやバイナリコードを処理対象とする場合には、ビットマップのビット数を少なくすると、ＦＡＩＬＵＲＥ遷移情報が多くなって記憶効率が悪くなる。
【特許文献１】特開昭６２−１７９０８３号公報
【非特許文献１】"Deterministic Memory-Efficient String Matching Algorithms for Intrusion Detection", Nathan Tuck et. al., Proceedings of the IEEE Infocom Conference, Hong Kong, China, March 2004
【発明の開示】
【発明が解決しようとする課題】
【００１２】
本発明の目的は、このような問題点に鑑み、相対アドレス関数決定情報のビット数を低減して、記憶効率を高めることができる、有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置を提供することにある。【００１３】
本発明の他の目的は、相対アドレス関数決定情報のビット数を低減して、記憶効率を高めることができるとともに、高速処理を可能にする、有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置を提供することにある。
【課題を解決するための手段】
【００１４】
本発明による、有限オートマトンのメモリ内データ構造の第１態様では、
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトンのメモリ内データ構造において、
１ワードに格納される、該現状態を示すベースアドレスと次状態への相対アドレス関数決定情報とを含む現・次状態情報を有し、該相対アドレス関数決定情報は、該入力文字がＧＯＴＯ遷移文字セットの共通部と一致しているか否かを判定するための共通部一致判定情報と該ＧＯＴＯ遷移文字セットから少なくとも該共通部を除いた部分である非共通部のいずれかを該入力文字が含んでいるか否かを判定するための非共通部存否情報とを含み、
該入力文字と該相対アドレス関数決定情報とで定まる相対アドレスと該ベースアドレスとの和又は差に対応したアドレスの１ワードに格納される、次の現・次状態情報を有する。【００１５】
この構成によれば、現状態を示すベースアドレスと次状態への相対アドレス関数決定情報とを含む現・次状態情報が１ワードに格納されているので、メモリから１ワードのデータを読み出す毎に、すなわち高速に、状態を遷移させることができるという効果を奏する。【００１６】
また、ＧＯＴＯ遷移文字セットの共通部のビット位置によらずこの共通部が１ビット増加する毎に、格納すべき次状態を示すベースアドレスの数を半減でき、かつ、共通部一致判定情報と非共通部存否情報とが互いに独立な情報であるので、共通部一致判定情報により低減されたベースアドレスの数を、非共通部存否情報によりさらに低減でき、すなわち、遷移情報の記憶効率を高くすることができ、これにより、ＣＡＭメモリのような高価なメモリを用いずに通常のメモリ、例えばＳＤＲＡＭ又はＳＲＡＭを用いて、多量のＧＯＴＯ遷移情報を含むオートマトン実行装置を安価に提供することが可能になるという効果を奏する。また、共通部が１ビット増加する毎に、格納すべき次状態を示すベースアドレスの数を半減できるので、非共通部存否情報のビット数を低減でき、これによりトータルとして相対アドレス関数決定情報のビット数を低減して、この情報の記憶効率を高くすることができるという効果を奏する。【００１７】
本発明による、有限オートマトンのメモリ内データ構造の第２態様では、
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトンのメモリ内データ構造において、
１ワードに格納される、アドレスモードと該アドレスモードに応じたベースアドレス又は相対ベースアドレスと次状態への相対アドレス関数決定情報とを含む現・次状態情報を有し、該ベースアドレスは該現状態を示し、該相対ベースアドレスと該１ワードのアドレスとの和又は差に対応した値がベースアドレスに等しく、該相対アドレス関数決定情報は、該入力文字がＧＯＴＯ遷移文字セットの共通部と一致しているか否かを判定するための共通部一致判定情報と該ＧＯＴＯ遷移文字セットから少なくとも該共通部を除いた部分である非共通部のいずれかを該入力文字が含んでいるか否かを判定するための非共通部存否情報とを含み、該非共通部存否情報のビット長は該アドレスモードが該相対ベースアドレスを示すときの方が該ベースアドレスを示すときよりも大きく、
該入力文字と該相対アドレス関数決定情報とで定まる相対アドレスと該ベースアドレスとの和又は差に対応したアドレスの１ワードに格納される、次の現・次状態情報を有する。【００１８】
この構成によれば、上記１ワードに格納された、現状態を示す該ベースアドレスと次状態への該相対アドレス関数決定情報とを含む該現・次状態情報において、該ベースアドレスを読み出しアドレスに対し相対アドレス化してそのビット長を短くし、一方、該非共通部存否情報のビット長を長くするので、該現・次状態情報の記憶効率をより高くすることができるという効果を奏するとともに、上記第１態様の効果も奏する。【００１９】
本発明による、有限オートマトンのメモリ内データ構造の第３態様では、
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトンのメモリ内データ構造において、
該現状態を示すベースアドレスに格納される、該入力文字がＧＯＴＯ遷移文字セットの共通部と一致しているか否かを判定するための共通部一致判定情報と該ＧＯＴＯ遷移文字セットから少なくとも該共通部を除いた部分である非共通部のいずれかを該入力文字が含んでいるか否かを判定するための非共通部存否情報とを含む相対アドレス関数決定情報と、
該入力文字と該相対アドレス関数決定情報とで定まる相対アドレスと該ベースアドレスとの和又は差に対応したアドレスに格納される、該次状態を示すベースアドレスとを有す
る。【００２０】
この構成によれば、ＧＯＴＯ遷移文字セットの共通部のビット位置によらずこの共通部が１ビット増加する毎に、格納すべき次状態を示すベースアドレスの数を半減でき、かつ、共通部一致判定情報と非共通部存否情報とが互いに独立な情報であるので、共通部一致判定情報により低減されたベースアドレスの数を、非共通部存否情報によりさらに低減でき、すなわち、遷移情報の記憶効率を高くすることができ、これにより、ＣＡＭメモリのような高価なメモリを用いずに通常のメモリ、例えばＳＤＲＡＭ又はＳＲＡＭを用いて、多量のＧＯＴＯ遷移情報を含むオートマトン実行装置を安価に提供することが可能になるという効果を奏する。また、共通部が１ビット増加する毎に、格納すべき次状態を示すベースアドレスの数を半減できるので、非共通部存否情報のビット数を低減でき、これによりトータルとして相対アドレス関数決定情報のビット数を低減して、この情報の記憶効率を高くすることができるという効果を奏する。【００２１】
本発明による有限オートマトン実行装置の第１態様では、
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトン実行装置において、
上記有限オートマトンのメモリ内データ構造の第１態様のデータ構造の情報が格納されるメモリと、
該入力文字と、該メモリの指定アドレスから読み出された現・次状態情報に含まれる相対アドレス関数決定情報とに基づいて、この現・次状態情報に含まれるベースアドレスに対する相対アドレスを求める相対アドレス算出手段と、
該読み出されたベースアドレスと該求められた相対アドレスとの和又は差に対応したアドレスを、該メモリに対し指定して、次の現・次状態情報を読み出させる、という処理を繰り返すメモリ読出制御手段とを有する。【００２２】
本発明による有限オートマトン実行装置の第２態様では、
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトン実行装置において、
上記有限オートマトンのメモリ内データ構造の第２態様のデータ構造の情報が格納されるメモリと、
該入力文字と、該メモリの指定アドレスから読み出された現・次状態情報に含まれる相対アドレス関数決定情報とに基づいて、この現・次状態情報に含まれるベースアドレス又は相対ベースアドレスに対する相対アドレスを求める相対アドレス算出手段と、
該読み出されたベースアドレスと該求められた相対アドレスとの和に対応したアドレス又は、該読み出された相対ベースアドレスと読み出しアドレスと該求められた相対アドレスとの和に対応したアドレスを、該メモリに対し指定して、次の現・次状態情報を読み出させる、という処理を繰り返すメモリ読出制御手段とを有する。【００２３】
本発明による有限オートマトン実行装置の第３態様では、
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトン実行装置において、
上記有限オートマトンのメモリ内データ構造の第３態様のデータ構造の情報が格納されるメモリと、
該入力文字と、該メモリの指定アドレスから読み出された相対アドレス関数決定情報とに基づいて、相対アドレスを求める相対アドレス算出手段と、
該メモリに対し、該指定アドレスと該相対アドレスとの和又は差に対応したアドレスを指定することにより、次状態を示すベースアドレスを読み出させ、次いで該次状態を示すベースアドレスを指定することにより、次の相対アドレス関数決定情報を読み出させる、という処理を繰り返すメモリ読出制御手段とを有する。【００２４】
本発明の他の目的、構成及び効果は以下の説明から明らかになる。
【実施例１】
【００２５】
図５は、本発明の実施例１に係る、有限オートマトンのメモリ内データ構造の説明に供する状態遷移図である。【００２６】
丸の中の数字は状態番号を示し、状態０が初期状態、二重丸の状態１及び３が出力状態であることを示す。実線の矢印はＧＯＴＯ遷移を示し、その矢印に付されたバイナリコードは、ＧＯＴＯ遷移文字を示す。点線の矢印はＦＡＩＬＵＲＥ遷移を示し、「その他」はＧＯＴＯ遷移文字以外の任意の文字を示し、ＡＮＹは任意の文字を示している。【００２７】
図６（Ａ）は、図５中の状態０からの遷移のみを抽出したものを示す。【００２８】
この図を、図１上部に示す従来のメモリ内データ構造と関係付けて説明すると、状態０は例えばＢＡＤＤＲ＝Ａ８８に対応し、ＧＯＴＯ遷移先の状態１及び３はＢＡＤＤＲ＝Ａ８８の行の空欄でないベースアドレスＡ１０００及びＡ０に対応し、遷移文字はこれら状態１及び３が格納されている下位アドレスＬＡの値０２及びＦＦに対応している。従来では、ＢＡＤＤＲ＝Ａ８８の行の２５６バイトのうち、ＧＯＴＯ遷移先が格納されているのは３バイトだけであり、その他には共通のＦＡＩＬＵＲＥ遷移先が格納されていた。【００２９】
本実施例１では、各行（状態）について共通のＦＡＩＬＵＲＥ遷移先の格納領域を削減するために、互いに独立な２つの情報量削減方法を用いている。【００３０】
第１の情報量削減方法は、図６（Ｂ）に示す共通部一致判定情報ＣＭＮＩＮＦＯを用いたものであり、この共通部一致判定情報ＣＭＮＩＮＦＯは、マスクＭＡＳＫとコモンＣＭＮとで構成され、それぞれ、状態からＧＯＴＯ遷移する文字のセットに基づいて後述のように作成され、そのビット長は入力文字ＩＳのそれに等しい。【００３１】
マスクＭＡＳＫの各ビットは、各ＧＯＴＯ遷移文字の対応するビットが共通値である場合、‘１’であり、そうでなければ‘０’である。２値コードの下位からｉ番目を第ｉビットと称し、最下位を第０ビットと称すると、図６（Ｂ）の場合、第３、４及び７ビットが共通値である。コモンＣＭＮは、マスクＭＡＳＫ中のセットビット（‘１’のビット）に対応する位置の該共通値を示しており、マスクＭＡＳＫのリセットビットに対応するコモンＣＭＮのビット値は‘０’になっている。図６（Ｂ）の場合、コモンＣＭＮの第２、３及び７ビットはそれぞれ、該共通値が‘０’、‘０’及び‘１’であることを示している。【００３２】
共通部一致判定情報ＣＭＮＩＮＦＯは、マスクＭＡＳＫとコモンＣＭＮの対応するビットの組を４値で表したものであり、マスクＭＡＳＫのセットビットに対応する４値はコモンＣＭＮの２値に等しく、マスクＭＡＳＫのリセットビットに対応する４値を"−"で表記している。すなわち、マスクＭＡＳＫが‘１０００１１００’であり、コモンＣＭＮが‘１０００００００’であるとき、共通部一致判定情報ＣＭＮＩＮＦＯは‘１−−−００−−’と表記される。【００３３】
図６（Ｃ）は、状態０を示す、メモリのワードアドレスＡ０に相対アドレス関数決定情報ＲＡＦＤＩとして格納される、共通部一致判定情報ＣＭＮＩＮＦＯと非共通部ビットマップＢＩＴＭＡＰとの組を示す。【００３４】
任意の入力文字ＩＳについて、マスクＭＡＳＫの‘１’に相当するビットのうち、いずれかが、対応するコモンＣＭＮのビットの値に等しくなければ、ＧＯＴＯ遷移ではない、すなわち第１のＦＡＩＬＵＲＥ遷移（一括ＦＡＩＬＵＲＥ遷移）であると判定できる。マスクＭＡＳＫに含まれるセットビットの数をＣＬと表記すると、この判定により、状態０
からの遷移先情報量を従来の２５６ワードから、２５６／２CL＋２＝（２8-CL＋２）ワードに、具体的にはＣＬ＝３の場合には３４ワードに、ＣＬ＝４の場合には１８ワードに、ＣＬ＝５の場合は１０ワードに低減できる（図３中の「ＣＭＮＩＮＦＯ使用」）。ここに"＋２"は、この一括ＦＡＩＬＵＲＥ遷移であると判定が行われたときの遷移先が格納される１ワードと、ベースアドレスに格納される相対アドレス関数決定情報ＲＡＦＤＩとに対応している。【００３５】
この第１の情報量削減方法のみ用いる場合には、入力文字ＩＳからマスクＭＡＳＫのセットビットに対応する部分を取り除いたものを非共通部ＮＣＭＮと表記すると、ＮＣＭＮがＧＯＴＯ遷移文字のそれと一致していればそのベースアドレスをＡＤＤＲ＝ＢＡＤＤＲ＋ＮＣＭＮ＋１に格納し、そうでなければＦＡＩＬＵＲＥ遷移先のベースアドレスをこれに格納すればよい。一括ＦＡＩＬＵＲＥ遷移であると判定が行われたときの遷移先は、例えばワードアドレスＡＤＤＲ＝２8-CL＋１である。後述のように、このＡＤＤＲは、０又は−１とすることもできる。【００３６】
第２の情報量削減方法は、図６（Ｂ）において、入力文字ＩＳの非共通部ＮＣＭＮのうち所定Ｎビット、本実施例１では非共通部ＮＣＭＮの上位４ビットに着目した削減方である。この上位４ビットをブロックＢＬＫ、残りの下位ビットをブロック内オフセットＯＦＳと表記する。【００３７】
各ＧＯＴＯ遷移文字のブロックＢＬＫをデコードして１６ビットで表し、それぞれの論理和を非共通部ビットマップＢＩＴＭＡＰと表記する。【００３８】
任意の入力文字ＩＳのブロックＢＬＫをデコードし、そのセットビットに対応する非共通部ビットマップＢＩＴＭＡＰ上のビットが‘０’であれば、ＧＯＴＯ遷移文字でないので、第２のＦＡＩＬＵＲＥ遷移（一括ＦＡＩＬＵＲＥ遷移）と判定することができる。従って、非共通部ビットマップＢＩＴＭＡＰ中のセットビット数をＢmaxと表記すると、この第２の情報量削減方法だけで（ＢＬＫ＝ＩＳ）、状態０からの遷移先情報量を従来の２５６ワードから、（１６＊Ｂmax＋２）ワードに、Ｂmax＝３の場合には５０ワードに低減できる（図３中の「ＢＩＴＭＡＰ使用」）。ここに＊は積演算子であり、"＋２"は、この一括ＦＡＩＬＵＲＥ遷移であると判定が行われたときの遷移先が格納される１ワードと、ベースアドレスに格納される相対アドレス関数決定情報ＲＡＦＤＩとに対応している。【００３９】
この第２の情報量削減方法のみ用いる場合には、入力文字ＩＳのブロックＢＬＫをデコードしたもののセットビットが、非共通部ビットマップＢＩＴＭＡＰ上の下位側からセットビットを数えて（Ｂ＋１）番目（Ｂ＝０、１、・・・）のセットビットに対応していれば、ＡＤＤＲ＝Ｂ＊２4＋ＯＦＳ＋１に、このブロックＢＬＫ及びブロック内オフセットＯＦＳと等しいＧＯＴＯ遷移文字による遷移先のベースアドレスを格納し、そうでなければＦＡＩＬＵＲＥ遷移先のベースアドレスを格納すればよい。一括ＦＡＩＬＵＲＥ遷移であると判定が行われたときの遷移先ベースアドレス格納位置は、例えばワードアドレスＡＤＤＲ＝１６＊Ｂmax＋１である。後述のように、このＡＤＤＲは、０又は−１とすることもできる。【００４０】
上述のような第１の情報量削減方法と第２の情報量削減方法とは互いに独立であるので、両方の情報量削減方法を用いることにより、情報量削減を効率的に増大させることができる。すなわち、状態からの遷移先情報量を従来の２５６ワードから、１６＊Ｂmax／２CL＋２＝（２4-CL＊Ｂmax＋２）ワードに、例えばＣＬ＝３、Ｂmax＝３の場合には８ワードに低減できる（図３中の「ＣＭＮＩＮＦＯ＆ＢＩＴＭＡＰ使用」）。ここに"＋２"は、上記第１又は第２の一括ＦＡＩＬＵＲＥ遷移であると判定が行われたときの遷移先が格納される１ワードと、ベースアドレスに格納される相対アドレス関数決定情報ＲＡＦＤＩと
に対応している。【００４１】
本実施例１では、第１と第２の両方の情報量削減方法を用いる。この場合、入力文字ＩＳのブロックＢＬＫをデコードしたもののセットビットが、非共通部ビットマップＢＩＴＭＡＰ上の下位側からセットビットを数えて（Ｂ＋１）番目（Ｂ＝０、１、・・・）のセットビットに対応していれば、ワードアドレスＡＤＤＲ＝Ｂ＊２4-CL＋ＯＦＳ＋１に、このブロックＢＬＫ及びブロック内オフセットＯＦＳと等しいＧＯＴＯ遷移文字による遷移先のベースアドレスを格納し、そうでなければＦＡＩＬＵＲＥ遷移先のベースアドレスを格納する。第１又は第２の一括ＦＡＩＬＵＲＥ遷移であると判定が行われたときの遷移先ベースアドレス格納位置は、例えばワードアドレスＡＤＤＲ＝Ｂmax＊２4-CL＋１である。後述のように、このＡＤＤＲは、０又は−１とすることもできる（以下、４−ＣＬをブロックサイズ指数Ｓと表記する）。【００４２】
すなわち、図２に示すように、状態を示すベースアドレスＢＡＤＤＲに、相対アドレス関数決定情報ＲＡＦＤＩとして上記共通部一致判定情報ＣＭＮＩＮＦＯと非共通部ビットマップＢＩＴＭＡＰとを格納し、これに定数、例えば１又は２を加えたワードワードアドレスから、遷移先のベースアドレスＢＡＤＤＲを格納する。より具体的には、ベースアドレスＢＡＤＤＲからの相対アドレスＲＡＤＤＲ＝Ｂ＊２S＋ＯＦＳ＋（定数）に、換言すれば第Ｂブロックのブロック内オフセットＯＦＳに、このブロックナンバＢとＯＦＳとに対応した非共通部ＮＣＭＮを持つＧＯＴＯ遷移文字による遷移先のベースアドレスを格納し、この非共通部ＮＣＭＮがＧＯＴＯ遷移文字に含まれなければＦＡＩＬＵＲＥ遷移先のベースアドレスを格納する。【００４３】
図４は、図５に対応した有限オートマトンのメモリ内データ構造を示す。この場合、図２中の定数は１である。左端のＡ０〜Ａ４はそれぞれ、図５中の状態０〜４に対応したベースアドレスＢＡＤＤＲであり、１６進表記のワードアドレスＡＤＤＲ＝００〜０７が図６（Ａ）に対応している。図４中の空欄は、メモリ内には存在しない領域である。１ワードは３２ビットであり、コモンＣＭＮが１６ビット、非共通部ビットマップＢＩＴＭＡＰが１６ビットである。【００４４】
具体的には、図６（Ｂ）のＢ＝０（第０ブロック）が図４のワードアドレス０１及び０２に対応し、Ｂ＝０の非共通部ＮＣＭＮに含まれるブロック内オフセットＯＦＳが０であるので、第０ブロックの最初のワードアドレス０１に、ＧＯＴＯ遷移文字‘１００１００００’による遷移先のベースアドレスＢＡＤＤＲ＝Ａ２を格納し、ワードアドレス０２に対応するＧＯＴＯ遷移文字が存在しないので、ここにはＦＡＩＬＵＲＥ遷移先のＢＡＤＤＲ＝Ａ０を格納する。次にＢ＝１（第１ブロック）の非共通部ＮＣＭＮに含まれるブロック内オフセットＯＦＳが‘０’であるので、第１ブロック内の最初のワードアドレス０３に、ＧＯＴＯ遷移文字‘１１００００１０’による遷移先のＢＡＤＤＲ＝Ａ３を格納し、ワードアドレス０４に対応するＧＯＴＯ遷移文字が存在しないので、ここにはＦＡＩＬＵＲＥ遷移先のＢＡＤＤＲ＝Ａ０を格納する。同様にして、Ｂ＝２（第２ブロック）の非共通部ＮＣＭＮに含まれるブロック内オフセットＯＦＳが‘１’であるので、第２ブロック内の２番目のワードアドレス０６に、ＧＯＴＯ遷移文字‘１１１０００１１’による遷移先のＢＡＤＤＲ＝Ａ１を格納し、ワードアドレス０５に対応するＧＯＴＯ遷移文字が存在しないので、ここにはＦＡＩＬＵＲＥ遷移先のＢＡＤＤＲ＝Ａ０を格納する。【００４５】
上述のように第１又は第２の情報量削減方法のいずれかで入力文字ＩＳが一括ＦＡＩＬＵＲＥ遷移文字であると判定された場合には、第Ｂmaxブロックの最初のワードアドレスＡＤＤＲ＝ＢＡＤＤＲｉ＋Ｂmax＊２S＋１に、一括ＦＡＩＬＵＲＥ遷移先のベースアドレスＢＡＤＤＲを格納する。図６（Ａ）の場合、図４中のワードアドレス０７に、ＢＡＤＤＲ＝Ａ０を格納する。【００４６】
ベースアドレスＢＡＤＤＲが格納されたワードワードアドレスＡＤＤＲにはさらに、出力状態Ｑと消費フラグＦとが格納されている。Ｑは、ベースアドレスＢＡＤＤＲが示す状態が出力状態であれば‘１’、そうでなければ‘０’である。消費フラグＦは、後述のように、遷移元からその状態へ遷移する際に入力文字ＩＳを持ち越すとき、すなわち、入力文字ＩＳを未消費でこの状態に遷移するときに‘０’、持ち越さない時（消費）のとき‘１’である。【００４７】
出力状態Ｑと消費フラグＦとは、ベースアドレスＢＡＤＤＲとともに格納されており、１ワードが３２ビットである場合、ベースアドレスＢＡＤＤＲを最大３０ビットとすることができる。【００４８】
図７（Ａ）は、図５中の状態１からの遷移のみを抽出したものを示す。図７（Ｂ）は、状態１を示す、メモリのワードアドレスＡＤＤＲ＝Ａ１に、相対アドレス関数決定情報ＲＡＦＤＩとして格納される共通部一致判定情報ＣＭＮＩＮＦＯと非共通部ビットマップＢＩＴＭＡＰとを示す。これらはそれぞれ、図６（Ａ）及び（Ｃ）の場合と同様である。【００４９】
図９（Ａ）は、図５中の状態３からの遷移のみを抽出したものを示す。【００５０】
この場合、図９（Ｂ）に示すように、ＧＯＴＯ遷移文字が１個であるので、その各ビットが共通値であり、マスクＭＡＳＫは各ビットがセットビットとなる。また、コモンＣＭＮはこのＧＯＴＯ遷移文字に等しくなる。非共通部ＮＣＭＮが０であるので、ブロックＢＬＫも０となり、従って、非共通部ビットマップＢＩＴＭＡＰは最下位ビットのみセットビットとなる。Ｓ＝０、Ｂは０のみであり、ワードアドレスＡＤＤＲ＝Ａ３＋１にＧＯＴＯ遷移先のＢＡＤＤＲ＝Ａ４が格納され、その次のワードアドレスＡＤＤＲ＝Ａ３＋１＋１（Ｂmax＝１）にＦＡＩＬＵＲＥ遷移先のＢＡＤＤＲ＝Ａ２が格納される（図４参照）。【００５１】
図９（Ｃ）は、状態３を示す、メモリのワードアドレスＡ３に、相対アドレス関数決定情報ＲＡＦＤＩとして格納される共通部一致判定情報ＣＭＮＩＮＦＯと非共通部ビットマップＢＩＴＭＡＰとを示す。【００５２】
図８（Ａ）は、図５中の状態２からの遷移のみを抽出したものを示す。【００５３】
この場合、ＧＯＴＯ遷移文字が存在しないので、共通値のビット位置を示すマスクＭＡＳＫは各ビットが０となる。任意の入力文字ＩＳについてＦＡＩＬＵＲＥ遷移となるので、このときのＣＭＮの各ビットを‘１’で表すことにし、ＭＡＳＫとＣＭＮの対応するビットについて、それぞれ‘０’及び‘１’であるとき、共通部一致判定情報ＣＭＮＩＮＦＯの４値を‘×’で表す。マスクＭＡＳＫのビット値‘０’に対応するＣＭＮのビット値‘１’は、共通値を意味せず、ドント・ケアを意味している。この意味は、以下の実施例９で明瞭になる。ＧＯＴＯ遷移文字が存在しないので、図４に示す如く、ＡＤＤＲ＝Ａ２の次のワードアドレスＡＤＤＲ＝Ａ２＋１（Ｂmax＝０）には、ＦＡＩＬＵＲＥ遷移先のＢＡＤＤＲ＝Ａ０が格納されている。【００５４】
ワードアドレスＡ４についても、Ａ２と同様である。【００５５】
次に、消費フラグＦが必須でないことを、図１０を参照して説明する。【００５６】
図１０（Ａ）は、ＧＯＴＯ遷移と、状態２から状態５又は６へのＦＡＩＬＵＲＥ遷移と、状態７から状態５又は６へのＦＡＩＬＵＲＥ遷移とを示している。状態４であるとき、
入力文字ＩＳがＣであれば状態５へ遷移し、入力文字ＩＳがＤであれば状態６へ遷移するので、図１０（Ｂ）に示すように、状態２及び７のそれぞれから、その他のＦＡＩＬＵＲＥ遷移先を状態４とし、入力文字ＩＳを持ち越して（Ｆ＝‘０’）再度使用する構成と等価である。すなわち、図１０（Ｂ）に示すようにＦ＝‘０’としてＦＡＩＬＵＲＥ遷移する替わりに、図１０（Ａ）に示すようにＦ＝‘１’としてＦＡＩＬＵＲＥ遷移してもよい。【００５７】
したがって、全ての消費フラグＦの値を‘１’とすることにより、消費フラグＦを用いない構成であってもよい。【００５８】
しかしながら、図１０（Ｂ）に示すように表現することにより、トータルの遷移先が少なくなるので、必要なメモリ容量を低減することができる。これに対し、図１０（Ａ）の場合には、有意な情報量が増えるものの順次状態遷移するときの総遷移数が低減するので、処理速度が高速となる。どちらの表現とするかは、部分的にも全体的にも変更可能であり、メモリの容量と必要な処理速度とを考慮して、いずれかを選択すべき問題である。【００５９】
図１１は、上記の如く構成されたメモリ内データ構造の有限オートマトンを用い、ソフトウェア処理により文字列Ｘ中のキーワードを検出する情報処理装置１０のハードウェア構成を示す概略ブロック図である。【００６０】
この情報処理装置１０は、例えばプロキシサーバであり、ＣＰＵ１１がインタフェース１２を介してＲＯＭ１３、ＲＡＭ１４、ハードディスクドライブ１５、ネットワークアダプタ１６、入力装置１７及び表示装置１８に結合されている。図１１では簡単化の為に、複数のインタフェースを１つのブロック１２で表している。インタフェース１２は、メモリコントローラを含んでいる。【００６１】
ＲＯＭ１３は、例えばフラッシュメモリであり、ＢＩＯＳが格納されている。【００６２】
ＲＡＭ１４は、例えばＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）（ＤＤＲ（Double-Data-Rate）、ＤＤＲ２又はＤＤＲ３であってもよい）又はＳＲＡＭで構成され、主記憶装置として用いられる。ＳＤＲＡＭの場合、メモリコントローラがＣＰＵ１１に内蔵され又はインタフェース１２の構成要素であるチップセットに含まれている。【００６３】
磁気記録媒体を含むハードディスクドライブ１５には、ＯＳ、デバイスドライバ、アプリケーションプログラム及びデータが格納され、ＯＳの管理下で仮想記憶方式によりこれらがＲＡＭ１４上にロードされてこのアプリケーションプログラムが実行される。このアプリケーションプログラムには、例えば、ＵＲＬフィルタリング、メールフィルタリング又はウイルスチェックにおける上記キーワードを検出するプログラムが含まれ、このデータには、図４に示すような構造の有限オートマトンが含まれ、これが該アプリケーションプログラムの初期化ルーチンにおいてＲＡＭ１４にロードされる。【００６４】
ネットワークアダプタ１６は、不図示のルータを介してインターネットに接続され、受信データがＯＳを介してＲＡＭ１４のバッファ領域に一時記憶される。【００６５】
入力装置１７は、キーボード及びポインティングデバイスを含み、指示入力用である。【００６６】
表示装置１８は、上記キーワード検出プログラムの実行結果表示用等として用いられる。【００６７】
図１２は、このキーワード検出プログラムの概略フローチャートである。以下、括弧内
は図中の識別符号である。【００６８】
（Ｓ０）次のような初期値設定処理を行う。すなわち、例えば上記バッファ内の受信文字列Ｘの最初の文字ＩＳを入力文字として取得する。入力文字ＩＳのビット長は、例えば８ビットである。ワードアドレスＡＤＤＲに初期値ＡＤＤＲ０、例えば図４中のアドレスＡ０を代入する。また、文字列Ｘ中の文字ＩＳの位置を示す変数ＣＯＵＮＴに初期値０を代入する。【００６９】
（Ｓ１）ＲＡＭ１４のワードアドレスＡＤＤＲから１ワードの相対アドレス関数決定情報ＲＡＦＤＩを読み出す。この相対アドレス関数決定情報ＲＡＦＤＩは、上述の１６ビットの共通部一致判定情報ＣＭＮＩＮＦＯと１６ビットの非共通部ビットマップＢＩＴＭＡＰとからなる。【００７０】
（Ｓ２）後述の如く、入力文字ＩＳと相対アドレス関数決定情報ＲＡＦＤＩとに基づいて、相対アドレスＲＡＤＤＲを算出する。【００７１】
（Ｓ３）ワードアドレスＡＤＤＲに相対アドレスＲＡＤＤＲを加算したものを、新たなワードアドレスＡＤＤＲとして求める。【００７２】
（Ｓ４）ＲＡＭ１４のワードアドレスＡＤＤＲから１ワードのデータを読み出す。このデータは、例えば図４のＡＤＤＲ＝０４から読み出したものであり、ベースアドレスＢＡＤＤＲと、出力状態Ｑと、消費フラグＦとからなる。【００７３】
（Ｓ５）Ｑ＝１であればステップＳ６へ進み、そうでなければステップＳ７へ進む。【００７４】
（Ｓ６）ベースアドレスＢＡＤＤＲ及びＣＯＵＮＴの値を、処理終了後の出力情報としてＲＡＭ１４に格納しておく。ウイルスチェックの場合には、この段階で、文字列Ｘに対する処理を終了してそのウイルスに対する後処理へ移行してもよい。【００７５】
（Ｓ７）Ｆ＝‘０’であれば、現在の入力文字ＩＳを持ち越すのでステップＳ１へ戻り、そうでなければステップＳ８へ進む。【００７６】
（Ｓ８）文字列Ｘが空でなければステップＳ９へ進み、空であればキーワード検出処理を終了し、後処理プログラムにおいて、ステップＳ６で格納したデータがあれば、例えばこれに関係した情報を表示装置１８に表示させる。【００７７】
（Ｓ９）文字列Ｘから次の入力文字ＩＳを取得し、ＣＯＵＮＴを１だけインクリメントし、ステップＳ１へ戻る。【００７８】
図１３は、図１２のステップＳ２の処理の詳細フローチャートである。【００７９】
（Ｓ１０）マスクＭＡＳＫとコモンＣＭＮの論理和を演算してその結果を合成マスクＣＭＡＳＫに代入する。【００８０】
合成マスクＣＭＡＳＫは、通常はマスクＭＡＳＫと等しい。図８（Ｂ）に示すようにマスクＭＡＳＫの各ビットが‘０’でコモンＣＭＮの各ビットが‘１’となる場合のみ両者が異なり、合成マスクＣＭＡＳＫの各ビットが‘１’となる。この合成マスクＣＭＡＳＫをマスクＭＡＳＫの変わりに用いることにより、以下の処理で、共通部一致判定情報ＣＭＮＩＮＦＯが‘ＸＸＸＸＸＸＸＸ’である特殊な場合を、通常の場合と同様に取り扱うことが可能となる。【００８１】
（Ｓ１１）合成マスクＣＭＡＳＫ中のセットビットの数を求めてこれをＣＬに代入する。【００８２】
（Ｓ１２）４−ＣＬ＞０であればステップＳ１３へ進み、そうでなければステップＳ１４へ進む。【００８３】
（Ｓ１３）ブロックサイズ指数Ｓに４−ＣＬを代入し、ステップＳ１５へ進む。【００８４】
（Ｓ１４）ブロックサイズ指数Ｓに０を代入する。例えばＣＭＮＩＮＦＯ＝‘ＸＸＸＸＸＸＸＸ’である場合には、Ｍ＝８となるので、Ｓ＝０となる。【００８５】
（Ｓ１５）入力文字ＩＳと合成マスクＣＭＡＳＫの対応するビット毎の論理積がコモンＣＭＮにマッチすれば、入力文字ＩＳがＧＯＴＯ遷移文字のいずれかにマッチしている可能性があるので、ステップＳ１６へ進み、そうでなければステップＳ１Ａへ進む。ＣＭＮＩＮＦＯ＝‘ＸＸＸＸＸＸＸＸ’である場合には、このステップＳ１５で否定判定される。【００８６】
（Ｓ１６）入力文字ＩＳから、合成マスクＣＭＡＳＫのリセットビットに対応する部分を非共通部ＮＣＭＮとして抽出する。【００８７】
（Ｓ１７）非共通部ＮＣＭＮをＳビットだけ右シフトさせた後のものをブロックＢＬＫに代入し、このシフトにより取り除かれたものをブロック内オフセットＯＦＳに代入する。これにより、例えば図６（Ｂ）に示すように、非共通部ＮＣＭＮがブロックＢＬＫとブロック内オフセットＯＦＳとに分割される。【００８８】
（Ｓ１８）ブロックＢＬＫをデコードし、そのセットビットの位置に対応する非共通部ビットマップＢＩＴＭＡＰ上のビットが‘０’であれば、すなわち入力文字ＩＳがいずれのＧＯＴＯ遷移文字ともマッチしない場合には、ブロックナンバＢに−１を代入し、‘１’であれば、非共通部ビットマップＢＩＴＭＡＰ中のそのビットより下位側のビットの数をカウントし、その値をブロックナンバＢに代入する。これにより、ブロックナンバＢは、例えば図６(Ｂ)に示す値になる。【００８９】
（Ｓ１９）Ｂ＝−１であればステップＳ１Ａへ進み、そうでなければステップＳ１Ｂへ進む。【００９０】
(Ｓ１Ａ）非共通部ビットマップＢＩＴＭＡＰ中の全てのセットビットの数ＢmaxをブロックナンバＢに代入し、また、ブロック内オフセットＯＦＳに０を代入する。【００９１】
（Ｓ１Ｂ）求めたブロックサイズ指数ＳとブロックナンバＢとブロック内オフセットＯＦＳとを式ＲＡＤＤＲ＝Ｂ＊２S＋ＯＦＳ＋１の右辺に代入して、遷移先の相対アドレスＲＡＤＤＲを求める。【００９２】
以上のような処理により、メモリ内データ構造の有限オートマトンを用いて、文字列Ｘ中のキーワード及びその位置を検出することができる。
【実施例２】
【００９３】
上記実施例１では、ソフトウェアによりキーワード検出処理を行っているので、大量のデータを高速処理するのには向かない。そこで、この処理をハードウェアで行う構成を、本発明の実施例２として次に説明する。【００９４】
図１４は、図１２に対応した有限オートマトン実行装置を示す概略ブロック図である。図１５は、図１４の装置の動作を示す概略タイムチャートである。【００９５】
ＲＡＭ１４Ａは、例えばＳＤＲＡＭ（ＤＤＲ、ＤＤＲ２又はＤＤＲ３であってもよい）とメモリコントローラとの組、又はＳＲＡＭで構成され、上述のデータ構造の有限オートマトンが格納される。【００９６】
相対アドレス算出回路２０は、図１３に示す処理をハードウェアで実行するものである。【００９７】
制御回路２５はまず、レジスタ２３に例えば０を（図１５のＤ１）、消費フラグＦ、出力状態Ｑ及びカウンタ２７にそれぞれ１、０及び０を、初期設定する。【００９８】
文字列Ｘの一部がＦＩＦＯ（First In, First Out）のキュー２４に保持され、その１文字が入力文字ＩＳとして取り出される。消費フラグＦが‘１’である場合、制御回路２５からのクロックＣＬＫの１パルスがアンドゲート２６を介してレジスタ２２（Ｄ２）、キュー２４及びカウンタ２７のそれぞれのクロック入力端に供給される。【００９９】
ＲＡＭ１４Ａの、レジスタ２３で指定されたワードアドレスＡＤＤＲから、例えば３２ビットのデータ（相対アドレス関数決定情報ＲＡＦＤＩ、出力状態Ｑ及び消費フラグＦ）が読み出され、制御回路２５Ｂからのクロックパルスにより、これらがレジスタ２１に保持される（Ｄ３）。【０１００】
相対アドレス算出回路２０Ｄは、レジスタ２１に保持された相対アドレス関数決定情報ＲＡＦＤＩとレジスタ２２に保持された入力文字ＩＳとに基づいて、相対アドレスＲＡＤＤＲを算出し出力する。ＲＡＤＤＲは、制御回路２５からのクロックパルスにより、レジスタ２８に保持される（Ｄ４）。【０１０１】
一方、レジスタ２３の出力と値１とが加算回路２９で加算される。この加算は、相対アドレス算出回路２０の処理と並行して行われるので、相対アドレス算出回路２０内で１を加算するよりも処理が高速となる。【０１０２】
レジスタ２８と加算回路２９との出力値が加算回路３０で加算され、その結果がセレクタ３Ｓの一方の入力端に供給される。最初は、制御回路２５からの選択制御信号により加算回路３０の出力がセレクタ３Ｓで選択され、制御回路２５からのクロックパルスにより、レジスタ２３に保持される（Ｄ５）。これにより、ＲＡＭ１４ＡからベースアドレスＢＡＤＤＲ、出力状態Ｑ及び消費フラグＦが読み出され、制御回路２５からのクロックパルスにより、レジスタ２１に保持される（Ｄ６）。【０１０３】
Ｑ＝‘１’の場合、例えば、不図示のＣＰＵに割込が掛かって、レジスタ２１のベースアドレスＢＡＤＤＲ及びカウンタ２７の出力がこのＣＰＵで読み込まれる。【０１０４】
制御回路２５からクロックＣＬＫのパルスが１個出力され、このときＦ＝‘１’であれば、このパルスの立ち上がりでカウンタ２７が１だけインクリメントされるとともに、キュー２４から１文字取り出され、このパルスの立ち下がりで該文字が入力文字ＩＳとして、レジスタ２２に保持される（Ｄ８）。【０１０５】
レジスタ２１に保持されたベースアドレスＢＡＤＤＲは、セレクタ３Ｓの他方の入力端に供給され、制御回路２５によりこのベースアドレスＢＡＤＤＲがセレクタ３Ｓで選択制
御され、制御回路２５からのクロックパルスにより、レジスタ２３に保持される（Ｄ７）。【０１０６】
このような処理が繰り返されて、図１２の処理がハードウェア的に行われる。【０１０７】
図１６は、図１４中の相対アドレス算出回路２０の構成例を示すブロック図である。図１７は、図１６の構成をより具体化した概略ブロック図である。【０１０８】
共通部処理回路３１では、図１３のステップＳ１０に対応して、マスクＭＡＳＫとコモンＣＭＮとの論理和を合成マスクＣＭＡＳＫとして求め、入力文字ＩＳから、合成マスクＣＭＡＳＫのセットビットに対応する部分を共通部抽出回路３１２で抽出し、これがコモンＣＭＮの対応するビットの値にマッチしているかどうかを一致判定回路３１３で判定する。図１７中の共通部不一致判定回路３１４は、図１６中の共通部抽出回路３１２と一致判定回路３１３とを備えている。【０１０９】
図１８（Ａ）は、入力文字ＩＳの第ｉビットＩＳｉと、合成マスクＣＭＡＳＫの第ｉビットＭｉと、コモンＣＭＮの第ｉビットＣｉと、一致判定出力の第ｉビットＯｉとの関係を示す真理値表である。【０１１０】
この表において、Ｍｉが‘１’のとき、ＩＳｉがＣｉと一致すればＯｉが‘１’、そうでなければＯｉが‘０’となる。この関係は、図１９（Ａ）に示すような回路で満たされる。すなわち、ＭｉとＩＳｉとをアンドゲート３１２ｉに供給すると、Ｍｉが‘１’のときＩＳｉがアンドゲート３１２ｉを通ってイクスクルーシブノアゲート３１３ｉに供給され、このＩＳｉがＣｉと一致するときイクスクルーシブノアゲート３１３ｉの出力Ｏｉが‘１’となる。【０１１１】
Ｍｉが‘０’のとき、アンドゲート３１２ｉの出力が‘０’となるので、Ｃｉが‘０’のときＯｉが‘１’、Ｃｉが‘１’のときＯｉが‘０’となり、図１８（Ａ）の下半分の関係が満たされる。換言すれば、Ｍｉが‘０’のとき、Ｃｉを‘０’とすることによりＯｉが‘１’となるので、入力文字ＩＳの全ビットについて一致判定を行うことにより、共通部の一判定を行うことができ、構成が簡単となる。【０１１２】
図１９(Ｂ)は、このような関係を用いて共通部不一致判定回路３１４を構成したものであり、入力文字ＩＳと合成マスクＣＭＡＳＫの対応するビット毎の論理積を共通部抽出回路３１２で求め、その結果の各ビットがコモンＣＭＮの対応するビットに等しいかどうかを一致判定回路３１３で判定し、その結果の反転出力を１ビットのアンマッチＵＭとして出力する。アンマッチＵＭは、一致判定回路３１３の２入力の対応するビットが１つでも不一致であれば‘１’となる。【０１１３】
図１８（Ａ）において、Ｍｉが‘１’のとき、Ｃｉ＝‘１’であればＩＳｉ＝Ｏｉとなり、Ｃｉ＝‘０’であればＩＳｉ＝ｎｏｔ  Ｏｉ（Ｏｉの反転値）となる。そこで、図１８（Ｂ）に示す如く、Ｍｉが‘１’のとき、Ｃｉが‘１’であればＩＳｉをセレクタ４１で選択させ、Ｃｉが‘０’であればＩＳｉをインバータ４０で反転したものをセレクタ４１で選択させ、いずれの場合もセレクタ４２でセレクタ４１の出力を選択させることにより、セレクタ４２の出力をＯｉとすることができる。また、図１８（Ａ）において、Ｍｉが‘０’のとき、Ｏｉ＝ｎｏｔ  Ｃｉとなるので、Ｃｉをインバータ４３で反転させたものをセレクタ４２で選択することにより、セレクタ４２の出力をＯｉとすることができる。従って、図１９(Ａ）の回路の替わりに、図１８(Ｂ)に示す回路を用いることもできる。【０１１４】
図１６に戻って、非共通部抽出・分割回路３４では、入力文字ＩＳのうち合成マスクＣＭＡＳＫのリセットビットに対応する部分が非共通部ＮＣＭＮとして抽出され、これが分割部３４２で、上位４ビット（ＮＣＭＮが３ビット以下であればその全ビット）のブロックＢＬＫと、残りのブロック内オフセットＯＦＳと分割される（ＮＣＭＮが３ビット以下であればＯＦＳ＝０）。また、非共通部ＮＣＭＮ抽出時に、ブロックサイズ２Sの指数Ｓが決定される。【０１１５】
図２０は、非共通部抽出・分割回路３４を順序回路で構成した例を示す。【０１１６】
この回路３４では、入力文字ＩＳがシフトレジスタ３４３にロードされ、クロックＣＬＫの立ち上がりエッジ毎にシフトレジスタ３４３の内容が右に１ビットシフトされてシフトレジスタ３４４のシリアル入力端ＳＩに供給される。一方、合成マスクＣＭＡＳＫがシフトレジスタ３４５にロードされ、クロックＣＬＫの立ち上がりエッジ毎にシフトレジスタ３４５の内容が右に１ビットシフトされ、その反転シリアル出力端~ＳＯの信号がアンドゲート３４６の一方の入力端に供給される。アンドゲート３４６の他方の入力端には、シフトレジスタ３４５の出力遅延を考慮して、クロックＣＬＫを遅延ゲート３４７で遅延させたものが供給される。アンドゲート３４６の出力は、非共通部クロックＵＣＬＫとしてシフトレジスタ３４４のクロック入力端に供給される。【０１１７】
このような構成により、入力文字ＩＳのうち、合成マスクＣＭＡＳＫのリセットビットに対応する部分のみがシフトレジスタ３４４に取り込まれてシフトされる。図２１(Ａ）は、シフトレジスタ３４３に入力文字ＩＳがロードされた後、クロックＣＬＫによりシフトされる前の状態を示す。図２１(Ｂ)は、クロックＣＬＫの８個のパルスにより入力文字ＩＳの非共通部ＮＣＭＮがシフトレジスタ３４４に取り込まれた状態を示す。このシフトは、シフトレジスタ３４４がゼロクリアされた後に行われる。【０１１８】
シフトレジスタ３４４の上位４ビットをブロックＢＬＫとする。合成マスクＣＭＡＳＫのリセットビット数が４未満であっても、シフトレジスタ３４４の内容をさらに右へシフトさせずシフトレジスタ３４４の上位４ビットをブロックＢＬＫとすることにより、構成を簡単化する。ブロック内オフセットＯＦＳについても、さらに右シフトを行うことなく、単に出力配線を図示のようにクロスさせてビット順序を逆にすることで、構成を簡単化する。このようなブロックＢＬＫ及びブロック内オフセットＯＦＳは、実施例１で説明したものと異なるが、遷移文字セットを用いて相対アドレス関数決定情報ＲＡＦＤＩを作成するときにも同様にしてブロックＢＬＫ及びブロック内オフセットＯＦＳを定めれば、このように簡単化しても問題ない。【０１１９】
図２０に戻って、非共通部クロックＵＣＬＫはカウンタ３４８のクロック入力端に供給されてカウントされ、その値ＣＮが比較回路３４９により‘１００’と比較され、ＣＮ＞４となると、比較回路３４９の出力が‘１’となって非共通部クロックＵＣＬＫがアンドゲート３４Ａを通り、カウンタ３４Ｂでカウントされる。これにより、シフトレジスタ３４３のクロック入力端にクロックＣＬＫの８個のパルスを供給すれば、カウンタ３４Ｂのカウントがブロックサイズ指数Ｓとなる。図２２は、このような動作によりブロックサイズ指数Ｓが決定されることを示す。【０１２０】
非共通部抽出・分割回路３４がクロックＣＬＫに同期して動作するので、クロックＣＬＫの周波数をできるだけ高くしてその処理を高速化する。【０１２１】
図１７に戻って、ブロックアドレス決定回路３５では、非共通部抽出・分割回路３４の出力ＢＬＫがデコーダ３５１によりデコードされ、デコーディッドブロックＤＢＬＫとしてブロックナンバ検出回路３５２及び不存在判定回路３５３の一方の入力端に供給される
。ブロックナンバ検出回路３５２及び不存在判定回路３５３の他方の入力端には、非共通部ビットマップＢＩＴＭＡＰが供給される。ブロックナンバ検出回路３５２は、非共通部ビットマップＢＩＴＭＡＰのうち、デコーディッドブロックＤＢＬＫのセットビットより下位側のセットビットの個数をブロックナンバＢ１として求める。不存在判定回路３５３は、デコーディッドブロックＤＢＬＫのセットビットに対応する非共通部ビットマップＢＩＴＭＡＰのビットを反転したものをミスヒットＭＨとして出力する。【０１２２】
図２３は、ブロックアドレス決定回路３５の構成例を示すブロック図である。図２５は、この回路の動作説明図である。【０１２３】
ブロックナンバ検出回路３５２では、セットビット尾引・１ビットシフトライト回路４６により、デコーディッドブロックＤＢＬＫについてそのセットビットより下位側を全てセットビットにし、その全ビットを右に１ビットシフトさせる。図２４は、この回路４６の構成例を示す。【０１２４】
回路４６では、最上位ビットを‘０’とし、最上位ビット以外については、下位側から（ｉ＋１）番目の出力ビットとｉ番目の入力ビットとの論理和をｉ番目の出力ビットとしている。さらに、最下位のオアゲートを用いず且つ‘０’の最上位ビットを追加することにより、結果として出力を１ビット右にシフトさせている。【０１２５】
図２３に戻って、セットビット尾引・１ビットシフトライト回路４６の出力と非共通部ビットマップＢＩＴＭＡＰとの論理積をＡＮＤ回路４７で求め、その出力ＲＳＢＩＴＭＡＰのセットビットの個数を並列カウンタ４８でカウントし、その値をブロックナンバＢ１として出力する。【０１２６】
不存在判定回路３５３では、デコーディッドブロックＤＢＬＫと非共通部ビットマップＢＩＴＭＡＰとの論理積をＡＮＤ回路４９で求め、その結果をゼロ検出回路５０に供給して、全ビットが‘０’であればその出力ＭＨを‘１’とし、そうでなければＭＨを‘０’とする。【０１２７】
図１７に戻って、非共通部ビットマップＢＩＴＭＡＰが並列カウンタ３２１に供給されて、そのセットビットの数がＢmaxとして求められる。Ｂmax及びＢ１はそれぞれセレクタ３３１の一方及び他方の入力端に供給される。共通部不一致判定回路３１４の出力ＵＭと不存在判定回路３５３の出力ＭＨとが出力回路のオアゲート３３２に供給される。オアゲート３３２の出力ＮＥがセレクタ３３１の選択制御入力端に供給され、ＮＥが‘１’のとき、セレクタ３３１によりＢmaxが選択され、‘０’のときＢ１が選択され、それぞれブロックナンバＢとして演算回路３３３に供給される。演算回路３３３にはさらに、上述のブロックサイズ指数Ｓ及びブロック内オフセットＯＦＳが供給され、演算回路３３３はこれらに基づいてＢ＊２S＋ＯＦＳを計算し、その結果を相対アドレスＲＡＤＤＲとして出力する。【０１２８】
図２６は、演算回路３３３を組み合わせ回路で構成した例を示すブロック図である。【０１２９】
この回路では、４ビットのブロックナンバＢのそれぞれがデマルチプレクサ５１〜５４のデータ入力端に供給され、ブロックサイズ指数Ｓがデコーダ５５でデコードされて、デマルチプレクサ５１〜５４の選択制御入力端及びゲート回路５６の出力イネーブル制御入力端に供給される。デマルチプレクサ５１〜５４はいずれも、１ビット入力５ビット出力である。デマルチプレクサ５ｉ（ｉ＝１〜４）の第０〜４ビット出力はそれぞれ、レジスタ５７の第（ｉ−１）〜（ｉ＋３）ビットに供給され、デマルチプレクサ５ｉの第Ｓビット出力が‘１’となり、他のビット出力がハイインピーダンス状態となる。例えばデマル
チプレクサ５１について、その出力５１０〜５１４のうち、ブロックサイズ指数Ｓが‘０’のとき入力を出力５１０から取り出すとともに出力５１１〜５１４をハイインピーダンス状態にし、Ｓ＝１のとき、入力を出力５１１から取り出すとともに出力５１０及び５１２〜５１４をハイインピーダンス状態にする。【０１３０】
一方、４ビットのブロック内オフセットＯＦＳのそれぞれがゲート回路５６を介してレジスタ５７の第０〜３ビットに供給される。ゲート回路５６は、その出力の第Ｓ〜３ビットをハイインピーダンス状態にし、Ｓ＞０のとき第０〜（Ｓ−１）ビットの入力をスルーで出力する。【０１３１】
上記構成において、レジスタ５７がゼロクリアされるとともにブロックナンバＢ、ブロックサイズ指数Ｓ及びブロック内オフセットＯＳＦが演算回路３３３に供給され、所定時間経過後にレジスタ５７にクロックパルスが供給されて、デマルチプレクサ５１〜５４及びゲート回路５６の出力がレジスタ５７に保持される。これにより、例えばＢ＝‘００１１’、ＯＳＦ＝‘０１１１’、Ｓ＝３である場合、相対アドレスＲＡＤＤＲが‘０００１１１１１’として求められる。【０１３２】
なお、デマルチプレクサ５１〜５４として、非選択の出力をハイインピーダンスにする替わりに‘０’にするものを用い、この出力を、オアゲートを介してレジスタ５７の各ビット入力に供給する構成であってもよい（図２７参照）。【０１３３】
次に、図１７を参照して、相対アドレス算出回路２０の全体的な動作を説明する。【０１３４】
マスクＭＡＳＫ及びコモンＣＭＮがＯＲ回路３１１に供給され、非共通部ビットマップＢＩＴＭＡＰが並列カウンタ３２１、ブロックナンバ検出回路３５２及び不存在判定回路３５３に供給され、入力文字ＩＳ及び合成マスクＣＭＡＳＫが共通部不一致判定回路３１４に供給される。【０１３５】
共通部不一致判定回路３１４の出力ＵＭが‘１’になると、すなわち、入力文字ＩＳの共通部がコモンＣＭＮの対応する部分と不一致であると判定されると、セレクタ３３１により並列カウンタ３２１の出力Ｂmaxが選択され、ブロックナンバＢとして演算回路３３３に供給される。一方、合成マスクＣＭＡＳＫが非共通部抽出・分割回路３４に供給されて、入力文字ＩＳがブロックＢＬＫとブロック内オフセットＯＦＳとに分離されるとともに、ブロックサイズを定めるブロックサイズ指数Ｓが求められ、ブロック内オフセットＯＦＳ及びブロックサイズ指数Ｓが演算回路３３３に供給されて、演算回路３３３により相対アドレスＲＡＤＤＲが求められる。【０１３６】
一方、ブロックＢＬＫがデコーダ３５１でデコードされ、デコーディッドブロックＤＢＬＫがブロックナンバ検出回路３５２及び不存在判定回路３５３に供給されて、ブロックナンバ検出回路３５２と不存在判定回路３５３による処理が並行して行われる。アンマッチＵＭが‘０’であってもミスヒットＭＨが‘１’であれば、すなわち、入力文字ＩＳの共通部がコモンＣＭＮと一致していても非共通部が非共通部ビットマップＢＩＴＭＡＰ上のどのセットビットにも対応していないと判定されると、セレクタ３３１によりＢmaxが選択され、演算回路３３３にブロックナンバＢとして供給され、演算回路３３３により同様にして相対アドレスＲＡＤＤＲが求められる。アンマッチＵＭ及びミスヒットＭＨがいずれも‘０’である場合には、ブロックナンバ検出回路３５２の出力Ｂ１がセレクタ３３１により選択され、ブロックナンバＢとして演算回路３３３に供給され、演算回路３３３により同様にして相対アドレスＲＡＤＤＲが求められる。【０１３７】
このようなハードウェアによる並行処理で、相対アドレスＲＡＤＤＲが高速に求められ
る。
【実施例３】
【０１３８】
上記実施例２では、非共通部抽出・分割回路３４が順序回路で構成されているので、その処理速度がボトルネックとなる。【０１３９】
そこで、本発明の実施例３では、これを組合せ回路で構成して高速に処理することにより、相対アドレス算出回路２０の処理性能を向上させる。【０１４０】
図２７は、この実施例３の非共通部抽出・分割回路３４Ｐの構成を示す。【０１４１】
この回路３４Ｐでは、合成マスクＣＭＡＳＫの各ビットについて、それより上位側のセットビットの個数が回路６１により求められ、それぞれデマルチプレクサ群６２の対応するデマルチプレクサの選択制御入力端に供給される。【０１４２】
図２８（Ａ）は、上位側セットビット個数検出回路６１の構成例を示す。【０１４３】
この回路６１では、その入力の各ビットについて、そのビットと、１つ上位側の出力値とが加算器により加算されて出力され、最上位ビットはスルーで出力される。【０１４４】
図２８（Ｂ）の上位側セットビット個数検出回路６１Ａでは、回路６１での加算値の信号伝播遅延時間を短縮するために、中央付近の加算器６１３において、その入力ビットと上位側の全ビットとを加算して出力している。【０１４５】
図２７に戻って、ＣＭＡＳＫの出力を反転したものと入力文字ＩＳとのそれぞれの対応するビットの論理積がＡＮＤ回路６３で求められて、その結果がデマルチプレクサ群６２の対応するデマルチプレクサのデータ入力端に供給される。但し、最上位の論理積は、デマルチプレクサを介さずにオアゲート６４７に供給される。デマルチプレクサ群６２の各デマルチプレクサは、そのデータ入力端に供給される１ビットを、選択制御入力端に供給される値をデコードしたときのセットビットに対応する出力端から取り出し、その他の出力端を‘０’とするものであって、入力ビットを選択制御値だけ上位側へシフトさせる１ビット非同期シフタとして機能する。【０１４６】
すなわち、デマルチプレクサ群６２の第ｉデマルチプレクサ（ｉ＝０〜６）は、その出力が（８−ｉ）ビットであり、その選択制御値がｋであるとき、入力ビットをオアゲート６４ｊ、ｊ＝ｉ＋ｋへの出力ビットとして取り出し、その他の出力ビットの値を‘０’にする。但し、第０デマルチプレクサの最下位ビット出力はオアゲートに供給されず、スルーで用いられる。【０１４７】
例えば、デマルチプレクサ群６２の最下位のデマルチプレクサ６２０の出力８ビットのうち上位７ビットが下位側からそれぞれオアゲート６４１〜６４７に供給され、最下位ビットがそのまま用いられる。この最下位ビットと、オアゲート６４１〜６４３の出力とを、図２１(Ｂ)と同様にクロスさせて取り出し、ブロック内オフセットＯＦＳとする。オアゲート６４４〜６４７の出力は、ブロックＢＬＫである。【０１４８】
このような処理により、高速に、入力文字ＩＳから非共通部ＮＣＭＮが抽出され且つこれがブロックＢＬＫとブロック内オフセットＯＦＳとに分割される。【０１４９】
図２９は、図２７中のブロックサイズ指数検出回路６５を組合せ回路で構成した例を示すブロック図であり、この回路６５により、合成マスクＣＭＡＳＫに基づいてブロックサ
イズ指数Ｓが求められる。【０１５０】
この回路６５では、並列‘０’カウンタ６５１により合成マスクＣＭＡＳＫのリセットビットの個数がＣＮ０として求められ、これが加算回路６５２の一方の入力端に供給される。加算回路６５２の他方の入力端には−４が供給され、その加算結果がセレクタ６５３の一方の入力端に供給される。セレクタ６５３の他方の入力端及び選択制御入力端にはそれぞれ‘０００’及び加算回路６５２の出力の符号ビットが供給される。セレクタ６５３は、この符号ビットが‘０’、すなわちＣＮ０≧４であれば、加算結果を選択的に出力し、‘１’であれば、‘０００’を選択的に出力する。セレクタ６５３の出力は、ブロックサイズ指数Ｓとして用いられる。このような動作により、ブロックサイズ指数Ｓが高速に求められる。【０１５１】
図２７の回路３４Ｐは、図１７の非共通部抽出・分割回路３４の替わりに用いられ、これにより、相対アドレス算出回路２０の処理速度が向上する。【０１５２】
図３０は、図２７の非共通部抽出・分割回路３４Ｐの変形例を示す。【０１５３】
この回路３４Ｑでは、図２７のオアゲート群６４及びＡＮＤ回路６３を省略するために、デマルチプレクサ群６２Ａの各デマルチプレクサについて、出力イネーブル反転制御入力端を備え、これが‘１’のときにはそのブロックの全出力ビットをハイインピーダンス状態にし、‘０’のときには選択制御入力値で選択された出力ビット以外は全てハイインピーダンス状態にする。ハイインピーダンス状態は、‘０’にされた後に行われ、図３０中の回路３４Ｑの出力先の空白ブロックは‘０’である。上記出力イネーブル反転制御入力端は、ＣＭＡＳＫの対応するビットに接続されている。また、デマルチプレクサ群６２Ａの最上位にはトライステートバッファ６２７が用いられ、その反転制御入力端にＣＭＡＳＫの最上位ビットが接続され、入力文字ＩＳの最上位ビットがトライステートバッファ６２７の入力端に供給され、トライステートバッファ６２７の出力端が、ブロックＢＬＫの最上位ビットに対応した配線に接続されている。【０１５４】
他の点は、非共通部抽出・分割回路３４Ｐと同一である。
【実施例４】
【０１５５】
図３１は、本発明の実施例４に係る有限オートマトンのメモリ内データ構造を示す。【０１５６】
一般に、有限オートマトン実行装置では、入力文字ＩＳに対しＦＡＩＬＵＲＥ遷移となる確率が比較的高い。そこで、この有限オートマトンでは、ＧＯＴＯ遷移先の相対アドレスＲＡＤＤＲを変えることなく一括ＦＡＩＬＵＲＥ遷移先の相対アドレスＲＡＤＤＲを固定値−１にして、処理を高速化している。【０１５７】
図３２は、この構造の有限オートマトンに対応した相対アドレス算出手順を示すフローチャートである。【０１５８】
一括ＦＡＩＬＵＲＥ遷移の場合、ステップＳ１Ｂの計算を行う必要がないので、最初の方でＦＡＩＬＵＲＥ遷移であるか否かを判定する。【０１５９】
すなわち、まずステップＳ１Ｃにおいて、マスクＭＡＳＫとコモンＣＭＮとの排他的論理和が‘１１１１１１１１’であるか否かを判定し、すなわち図８（Ａ）に示すような無条件ＦＡＩＬＵＲＥ遷移であるか否かを判定し、肯定判定された場合にはステップＳ１Ｄで相対アドレスＲＡＤＤＲに固定値１を代入する。【０１６０】
ステップＳ１Ｃで否定判定された場合には、マスクＭＡＳＫは上述の合成マスクＣＭＡＳＫと同一となるので、ステップＳ１５Ａ以下の処理では、合成マスクＣＭＡＳＫの替わりにマスクＭＡＳＫが用いられる。すなわち、ステップＳ１５Ａ、Ｓ１１Ａ及びＳ１６Ａでは、マスクＭＡＳＫが用いられる。【０１６１】
ステップＳ１Ｃで否定判定された場合、ステップＳ１５Ａにおいて、入力文字ＩＳとマスクＭＡＳＫとの論理積がコモンＣＭＮにマッチするか否かを判定し、すなわち入力文字ＩＳの共通部がコモンＣＭＮの対応する部分と一致しているか否かを判定し、肯定判定した場合にはステップＳ１１Ａへ進み、そうでなければステップＳ１Ａ１へ進む。ステップＳ１Ａ１では、相対アドレスＲＡＤＤＲに固定値−１を代入する。【０１６２】
このような処理により、ＦＡＩＬＵＲＥ遷移の場合、高速に相対アドレスＲＡＤＤＲを求めることができる。【０１６３】
他の点は、図１３の場合と同一である。【０１６４】
なお、図３１において無条件ＦＡＩＬＵＲＥ遷移先の相対アドレスを−１にしておき、ステップＳ１Ｃにおいて、相対アドレスＲＡＤＤＲに固定値−１を代入する構成であってもよい。
【実施例５】
【０１６５】
図３３は、本発明の実施例５に係る、図３２のソフトウェア構成をハードウェア化した相対アドレス算出回路２０Ａを示す。【０１６６】
この回路２０Ａでは、図３２のステップＳ１Ｃ、Ｓ１Ｄ、Ｓ１５Ａ、Ｓ１９及びＳ１Ａ１に対応して全ビット不一致判定回路６６及びセレクタ３３５を備えている。【０１６７】
全ビット不一致判定回路６６は、マスクＭＡＳＫとコモンＣＭＮのそれぞれ対応するビットの排他的論理和を求め、その各ビットが‘１’であれば‘１’を出力し、そうでなければ‘０’を出力する。【０１６８】
出力回路３３Ａのセレクタ３３５により、全ビット不一致判定回路６６の出力が‘１’であればこれが優先されて、ＮＥの値に依らず固定値０が選択され、そうでなければ、ＮＥが‘１’のとき固定値−２が選択され、ＮＥが‘０’のとき演算回路３３３の出力が選択され、いずれの場合も相対アドレスＲＡＤＤＲとして出力される。このようなセレクタ３３５を用いているので、図１７の並列カウンタ３２１及びセレクタ３３１は不要である。【０１６９】
非共通部抽出・分割回路３４Ｑは、図３０の構成と同一である。共通部不一致判定回路３１４及び非共通部抽出・分割回路３４Ｑはいずれも、ＣＭＡＳＫの替わりにＭＡＳＫを用いている。【０１７０】
他の点は、図１７の回路と同一である。【０１７１】
本実施例４によれば、ＦＡＩＬＵＲＥ遷移の相対アドレスＲＡＤＤＲを高速に求めることができるので、有限オートマトン実行装置の性能が向上する。【０１７２】
なお、図３１において無条件ＦＡＩＬＵＲＥ遷移先の相対アドレスを−１にしておき、セレクタ３３５を２入力とし、固定値０を省略し、回路６６の出力をオアゲート３３２に供給する構成であってもよい。
【実施例６】
【０１７３】
上述のように、有限オートマトン実行装置ではＦＡＩＬＵＲＥ遷移となる確率が比較的高い。一方、ＲＡＭ１４Ａから２ワード目を読み出す動作と、読み出された１ワード目を用いる相対アドレス算出回路２０との動作を並行して行うことができる。【０１７４】
そこで、本発明の実施例６では、図３４に示すように、相対アドレス関数決定情報ＲＡＦＤＩ格納アドレスの次のワードワードアドレスに、一括ＦＡＩＬＵＲＥ遷移先のベースアドレスＢＡＤＤＲと、これに関係した出力状態Ｑと消費フラグＦとを格納し、個別遷移の相対アドレスＲＡＤＤＲを、Ｂ＊２S＋ＯＦＳ＋２とする。【０１７５】
図３５は、この方法を実行するためのフローチャートであり、図１２に示す方法の替わりに用いられる。【０１７６】
図１２と異なる２点の１つは、ステップＳ１Ａにおいて、ワードアドレスＡＤＤＲから２ワードのデータを連続的に読み出す点である。他の１つは、ステップＳ２ＡとステップＳ３との間にステップＳＡが挿入され、ステップＳ２Ａで求めた相対アドレスＲＡＤＤＲが１であった場合、ステップＳＢにおいて、ステップＳ１Ａで読み出された２ワード目の内容（ＡＤＤＲ＋１）をワードアドレスＡＤＤＲに代入して、ステップＳ７へ進む点である。【０１７７】
このような処理により、ステップＳ１ＡでワードアドレスＡＤＤＲから１ワードのデータが読み出された後に、ハードウェアによる２ワード目の読み出しと並行してステップＳ２Ａの処理を開始でき、また、一括ＦＡＩＬＵＲＥ遷移の場合にはステップＳ４の処理が行われないので、図１２の場合よりも処理が高速となる。【０１７８】
しかも、一括ＦＡＩＬＵＲＥ遷移の場合には相対アドレスＲＡＤＤＲが固定値１であり、図１３のステップＳ１Ａに示すブロックナンバＢを算出する必要がないので、処理が高速となる。【０１７９】
図３６は、ステップＳ２Ａの処理の詳細フローチャートである。【０１８０】
図３２と異なる点は、図３２のステップＳ１ＤとステップＳ１Ａ１とが１つのステップＳ１Ｄにまとめられることと、ステップＳ１Ｂ１において、相対アドレスＲＡＤＤＲの値が図３２のステップＳ１Ｂの場合よりも１だけ大きくなることである。【０１８１】
他の点は、図３２の場合と同一である。
【実施例７】
【０１８２】
図３７は、本発明の実施例７に係る有限オートマトン実行装置を示す。【０１８３】
この装置は、実施例６のソフトウェア構成をハードウェア化したものであり、ＲＡＭ１４Ａからの２ワード連続読み出しに対応してレジスタ２１Ａを追加し、図１４のセレクタ３Ｓの変わりに３入力のセレクタ３Ｓ１を用い、レジスタ２１ＡのＢＡＤＤＲ出力をセレクタ３Ｓ１に供給し、また、相対アドレス算出回路２０Ｂの出力を制御回路２５Ａに供給している。さらに、レジスタ２１と２１ＡとのＦ出力をセレクタ３Ｓ２に供給し、セレクタ３Ｓ２の出力をアンドゲート２６の一方の入力端に供給している。また、加算回路２９の一方の入力端に２を供給し、相対アドレス算出回路２０Ｂの処理と並行して加算回路２９の処理行わせている。【０１８４】
制御回路２５Ａは、相対アドレスＲＡＤＤＲが−１でないとき、図１４の場合と同じになるように制御し、相対アドレスＲＡＤＤＲが−１であるとき、セレクタ３Ｓ１及び３Ｓ２に対しそれぞれ、投機的先読み出しを保持したレジスタ２１ＡのＢＡＤＤＲ出力及びＦ出力を選択させ、クロックＣＬＫのパルスを１個出力する。【０１８５】
図３８は、この相対アドレス算出回路２０Ｂの構成例を示す。【０１８６】
出力回路３３Ｂでは、全ビット不一致判定回路６６の出力と、オアゲート３３２の出力ＮＥとがオアゲート３３６に供給され、オアゲート３３６の出力が‘１’のとき、固定値−１が相対アドレスＲＡＤＤＲとしてセレクタ３３４により選択される。オアゲート３３６の出力が‘０’であるとき、演算回路３３３の出力が相対アドレスＲＡＤＤＲとしてセレクタ３３４により選択される。【０１８７】
他の点は、図３３の場合と同一である。【０１８８】
図３９は、図３７の装置の動作を示すタイムチャートである。図１５中のデータと同一のものには同一符号を付している。【０１８９】
データＤ３Ａは、データＤ３の読み出しクロックの次のクロックで、ＲＡＭ１４Ａから先読み出されるデータであり、レジスタ２１Ａに保持される。相対アドレス算出回路２０Ｂは、この読み出しと並行して、レジスタ２１に保持された相対アドレス関数決定情報ＲＡＦＤＩとレジスタ２２に保持された入力文字ＩＳとに基づき、相対アドレスＲＡＤＤＲを算出する（Ｄ４）。ＲＡＤＤＲ＝−１である場合、レジスタ２１Ａの消費フラグＦが‘１’であれば、上記パルスの立ち上がりでカウンタ２７が１だけインクリメントされるとともに、キュー２４から１文字取り出され、このパルスの立ち下がりで該文字が入力文字ＩＳとして、レジスタ２２に保持される（Ｄ８）。【０１９０】
本実施例７によれば、上記先読みにより、ＦＡＩＬＵＲＥ遷移の場合、有限オートマトン実行装置の１遷移サイクルが図１５の場合よりも短縮されるという効果を奏する。【０１９１】
また、実施例６のソフトウェアによる処理がハードウェアで高速化されるとともに、非共通部抽出・分割回路３４Ｑ、全ビット不一致判定回路６６及びオアゲート３３６を用いているので、実施例１〜６のいずれの場合よりも高速処理が可能となるという効果を奏する。
【実施例８】
【０１９２】
マスクＭＡＳＫのセットビット数が４より小さいほど、特に０（Ｓ＝４）である場合、ＦＡＩＬＵＲＥ遷移先が格納される記憶領域が多くなって記憶効率が悪くなる。【０１９３】
図４０(Ａ)は、マスクＭＡＳＫのセットビット数が０で、ＧＯＴＯ遷移文字が、第０及び第１ブロックについてそれぞれ２個、第２〜５ブロックについてそれぞれ１個である場合を示す。この場合、１ブロックサイズが１６ワードとなるので、１６×６＝９６ワード内にＧＯＴＯ遷移先を格納する必要があり、そのうち、共通のＦＡＩＬＵＲＥ遷移先は８８ワードとなる。相対アドレス関数決定情報ＲＡＦＤＩとその他のＦＡＩＬＵＲＥ遷移を加えると、必要なワード数は合計９８となる。【０１９４】
そこで、本実施例８では、図４０（Ａ）の元状態Ｓを、図４０(Ｂ)に示すように３つのサブ状態Ｓ０〜Ｓ２に分割し、ＧＯＴＯ遷移しない場合にはＦ＝‘０’でサブ状態間をＦＡＩＬＵＲＥ遷移するようにしている。【０１９５】
本実施例８では、有限オートマトンのメモリ内データ構造が部分的に、Ｆ＝‘０’で直列多段に遷移するように変更される他は、上記他の実施例と同一であり、上記他の実施例と同一のソフトウェア又はハードウェアの構成により、状態遷移を実行させることができる。【０１９６】
図４０（Ｂ）の場合、各状態遷移サブセットのマスクＭＡＳＫのセットビット数が４以上であるので、いずれもブロックサイズは１であり、サブ状態Ｓ０〜Ｓ２について必要なワード数は合計、（４＋２）＋（３＋２）＋（１＋２）＝１４ワードとなり、サブ状態に分割する前の（１４／９８）１００≒１４％となって、記憶効率が向上する。
【実施例９】
【０１９７】
上記実施例８では、元状態Ｓの分割数が多くなると、処理時間が長くなる。そこで、本発明の実施例９では、図４１(Ａ）に示す１つの元状態Ｓを、図４２に示すように親状態Ｓ０と、これからＦ＝‘０’でいずれかにＧＯＴＯ遷移する複数の子状態Ｓ１０〜Ｓ１５とに分割し、形式的に直列２段になることを保証している。【０１９８】
この方法では、入力文字ＩＳの４ビット、例えば下位４ビットを無視して親状態から子状態へのＧＯＴＯ遷移先を決定し、子状態において、入力文字ＩＳの、無視された下位４ビットを含む全８ビットに基づいて、次の状態への遷移先を通常通り決定する。【０１９９】
図４３（Ａ）は、ＧＯＴＯ遷移文字セットが図４０（Ａ）と同一である場合における、親状態の相対アドレス関数決定情報ＲＡＦＤＩの定め方を示している。【０２００】
マスクＭＡＳＫについては、全ＧＯＴＯ遷移文字について、通常通りにその値を決定する。マスクＭＡＳＫのリセットビットのうち任意の４ビット、例えば下位４ビットについて、コモンＣＭＮの対応するビットを‘１’にし、マスクＭＡＳＫとコモンＣＭＮとの論理和を合成マスクＣＭＡＳＫとする。この合成マスクＣＭＡＳＫを用いて、入力文字ＩＳから非共通部ＮＣＭＮを抽出することにより、非共通部ＮＣＭＮが４ビットとなり、ブロックサイズが１となる。非共通部ビットマップＢＩＴＭＡＰ作成方法及びブロックナンバＢの決定方法は、上述のものと同一であり、ＮＣＭＮ＝ＢＬＫ、ＯＦＳ＝０、ＲＡＤＤＲ＝Ｂとなる。【０２０１】
コモンＣＭＮの各ビットは、マスクＭＡＳＫの対応するビットの値が‘０’であるとき、‘１’はドント・ケア（Ｄｏｎ’ｔ  Ｃａｒｅ）を意味している。【０２０２】
親状態Ｓ０のＧＯＴＯ遷移文字セットは、元状態Ｓのそれと同じであり、そのブロックナンバＢ毎に、子状態のＧＯＴＯ遷移文字サブセットに分割される。図４３（Ａ）の場合、親状態の８個のＧＯＴＯ遷移文字のセットが、ブロックナンバＢ＝０〜５の６サブセットに分割される。各子状態については、通常通りに相対アドレス関数決定情報ＲＡＦＤＩを作成する。図４３（Ｂ）は、子状態Ｓ１０についての相対アドレス関数決定情報ＲＡＦＤＩの作成を示す。【０２０３】
図４４は、実施例１〜９のいずれかの方法で作成された相対アドレス関数決定情報ＲＡＦＤＩと入力文字ＩＳとが与えられたときの、相対アドレス算出手順を示すフローチャートである。【０２０４】
図３６と異なる点は、ステップ１５Ｂにおいて、コモンＣＭＮの替わりにコモンＣＭＮとマスクＭＡＳＫとの論理積を用いてコモンＣＭＮのドント・ケア部をクリアしたものにする点と、ステップＳ１５Ｂの次において、マスクＭＡＳＫとコモンＣＭＮとの論理和を合成マスクＣＭＡＳＫとして求め、それ以下のステップＳ１１及びＳ１６において、マス
クＭＡＳＫの替わりに合成マスクＣＭＡＳＫを用いることにより、コモンＣＭＮのドント・ケア部をマスクのセットビットと同様に取り扱っている点である。【０２０５】
実施例８では、ステップＳ１ＣからステップＳ１５Ｂへ進んだ後はマスクＭＡＳＫと合成マスクＣＭＡＳＫとが等しくなるので、合成マスクＣＭＡＳＫの替わりにマスクＭＡＳＫを用いたが、本実施例９では、マスクＭＡＳＫのリセットビットに対応してコモンＣＭＮのビットをセットビットとすることがあるので、マスクＭＡＳＫの替わりに合成マスクＣＭＡＳＫを用いている。【０２０６】
図４３（Ａ）及び（Ｂ）についての上記説明から明らかなように、マスクＭＡＳＫの替わりに合成マスクＣＭＡＳＫを用いる他は、図３６の場合と同じ処理を行えばよい。コモンＣＭＮの各ビットをドント・ケアとして用いない場合は、ステップＳ１１以下においてＣＭＡＳＫ＝ＭＡＳＫとなり、図３６の場合と結果が同じになるので、図４４のフローチャートは図３２のそれを拡張したものになっている。【０２０７】
図４３（Ａ）において、第１段に必要な合計ワード数は６＋２＝８であり、第２段のＢ＝０〜５のグループについて必要なワード数は合計、２＋２＋１＋１＋１＋１＋２×６＝２０ワードとなり、グループ分けする前の（２８／９８）１００≒２９％となる。第１段のブロック数が少なくなるように、任意に取り得る合成マスクＣＭＡＳＫ中の‘１’の４ビットを選択することにより、データ圧縮率が向上する。【０２０８】
本実施例９によれば、第１段で「その他」のＦＡＩＬＵＲＥ遷移になれば（図４４でステップＳ１５Ｂ又はＳ１９からステップＳ１Ｄへ進む場合）、グループ分けしない場合と同じになること、第１段で「その他」のＦＡＩＬＵＲＥ遷移にならなくても第３段が無いこと、合成マスクＣＭＡＳＫの‘１’の４ビットを下位４ビットのように一律に決めてもデータを圧縮できるのでグループ分けが簡単であることから、実施例８よりも実用的である。【０２０９】
なお、コモンＣＭＮのドント・ケアは、状態を直並列２段に分割しない場合にも用いることができる。例えば、正規表現における任意の１文字又はある範囲内の文字を識別するのに用いることができる。
【実施例１０】
【０２１０】
図４５は、本発明の実施例１０に係る相対アドレス算出回路２０Ｃを示す。【０２１１】
この回路２０Ｃは、実施例９のソフトウェア構成をハードウェア化したものであり、図３８の相対アドレス算出回路２０Ｂの替わりに用いられる。【０２１２】
共通部処理回路３１Ａの共通部抽出回路３１２Ａでは、上記ステップＳ１５Ｂに対応して、図１６の合成マスクＣＭＡＳＫの替わりにマスクＭＡＳＫを用い、コモンＣＭＮの替わりにコモンＣＭＮとマスクＭＡＳＫとの論理積をＡＮＤ回路３１２Ａで取ったものを用いることにより、入力文字ＩＳの共通部がＧＯＴＯ遷移文字のいずれとも一致しない場合にＦＡＩＬＵＲＥ遷移と判定できるようにしている。これに対し、非共通部抽出・分割回路３４の非共通部抽出部３４１は、マスクＭＡＳＫの替わりに合成マスクＣＭＡＳＫを用いることにより、コモンＣＭＮの値を変えて状態を図４２に示すように直並列２段に分割した場合にも、通常の場合と同様に取り扱えるようにしている。【０２１３】
図４６は、図４５の構成をより具体化したブロック図である。【０２１４】
図３８と異なるのは、共通部不一致判定回路３１４Ａにおいて、図４７に示すように、
コモンＣＭＮの替わりにコモンＣＭＮとマスクＭＡＳＫとの論理積をＡＮＤ回路３１２Ａで取ったものを用いる点と、ＯＲ回路３１１で合成マスクＣＭＡＳＫを生成し、非共通部抽出・分割回路３４Ｑにおいて、上記理由によりマスクＭＡＳＫの替わりに合成マスクＣＭＡＳＫを用いている点である。【０２１５】
他の点は、図３８の場合と同一である。【０２１６】
実施例１０によれば、このような簡単な変更により、状態の直並列２段化を部分的に含む有限オートマトンにも対応できる。
【実施例１１】
【０２１７】
図４８は、本発明の実施例１１に係る有限オートマトンのメモリ内データ構造概略を、従来のそれと対比して示す。【０２１８】
以上の実施例では、次のようなメモリ内データ構造と処理とを用いていた。【０２１９】
（１）現状態を示すベースアドレスＢＡＤＤＲにこの状態からの遷移先相対アドレス関数決定情報ＲＡＦＤＩを格納しておき、このＲＡＦＤＩを読み出す。【０２２０】
（２）このＲＡＦＤＩと入力文字ＩＳとから相対アドレスＲＡＤＤＲを求め、アドレスＡＤＤＲ＝ＢＡＤＤＲ＋ＲＡＤＤＲを算出する。【０２２１】
（３）アドレスＡＤＤＲに、次状態を示すベースアドレスＢＡＤＤＲを格納しておき、このＢＡＤＤＲを読み出す。【０２２２】
これら（１）〜（３）が繰り返されて状態が遷移する。（３）と（１）の処理はＲＡＭ１４Ａからデータを読み出すだけであり、また、（３）から（１）へ戻るとき、（３）の「次状態を示すベースアドレスＢＡＤＤＲ」は（１）の「現状態を示すベースアドレスＢＡＤＤＲ」となる。【０２２３】
そこで、本実施例１１では、（１）の「現状態を示すベースアドレスＢＡＤＤＲ」を省略し、この替わりに（３）の「次状態を示すベースアドレスＢＡＤＤＲ」を用いることにより、（３）と（１）とを１つにまとめて、次のようなメモリ内データ構造と処理とを用いる。【０２２４】
（ｉ）アドレスＡＤＤＲに、現状態を示すベースアドレスＢＡＤＤＲとこの状態からの遷移先相対アドレス関数決定情報ＲＡＦＤＩとの組である現・次状態情報を格納しておき、これらＢＡＤＤＲ及びＲＡＦＤＩを読み出す。【０２２５】
（ii）このＲＡＦＤＩと入力文字ＩＳとから相対アドレスＲＡＤＤＲを求め、アドレスＡＤＤＲ＝ＢＡＤＤＲ＋ＲＡＤＤＲを算出する。【０２２６】
これら（ｉ）及び（ii） が繰り返されて状態が遷移する。図４８にも示すように、ＢＡＤＤＲとＲＡＦＤＩとの組（現・次状態情報）が１ワードに格納されているので、ＲＡＭ１４Ａから１ワードのデータを読み出す毎に、このデータと入力文字ＩＳとの組で、次の遷移先を決定することができる。【０２２７】
（３）と（１）を１つにまとめるときに、（１）の「現状態を示すベースアドレスＢＡＤＤＲ」を省略したので、現状態を示すベースアドレスは、ＲＡＭ１４Ａのアドレスではなく、ＲＡＭ１４ＡのアドレスＡＤＤＲに格納されているデータであり、この点が、以上
の実施例と大きく異なる。また、（３）と（１）を１つにまとめたので、１ワードのビット長が以上の実施例の場合の２倍、例えば６４ビットになる。【０２２８】
図４９に示すように、入力文字ＩＳを変数とする、ベースアドレスＢＡＤＤＲからの相対アドレスＲＡＤＤＲを求める関数が、相対アドレス関数決定情報ＲＡＦＤＩとその解釈により定まる。すなわち、この関数をＲＡＤＤＲ（ＲＡＦＤＩ，ＩＳ）と表記することができる。この点は、以上の実施例と同じである。ＡＤＤＲ＝ＢＡＤＤＲ＋ＲＡＤＤＲ（ＲＡＦＤＩ，ＩＳ）に、次の状態を示すベースアドレスＢＡＤＤＲと、この状態からの遷移先に対応した相対アドレス関数決定情報ＲＡＦＤＩとが格納されている。【０２２９】
図５０は、図５の状態遷移図をメモリ内のデータ構造で表したものであり、図４９中の定数が０である場合を示す。【０２３０】
この構造は、図４のＢＡＤＤＲ＝００に、Ａ０とこれに対応した出力状態Ｑと消費フラグＦとを記入し、ベースアドレスＢＡＤＤＲが記入されている行の空欄に、このベースアドレスＢＡＤＤＲからの遷移先を示す相対アドレス関数決定情報ＲＡＦＤＩを記入し、ＢＡＤＤＲ＝Ａ１〜Ａ４の行（ＢＡＤＤＲが０８、０Ｅ、１０及び１３である行）を削除したものを、太線で区切られた状態遷移セット単位で配置換えしたものになっている。この配置換えは、任意である。但し、記号Ａ０〜Ａ４の値がこの配置換えに応じて変わる。【０２３１】
図５１は、図５０のメモリ内データ構造の有限オートマトンを用いてキーワードを検出するプログラムの概略フローチャートである。【０２３２】
図１２とは、ステップＳ４が存在しない点と、ステップの順番が異なる点と、ステップＳ２Ａで相対アドレスＲＡＤＤＲが１だけ小さくなる点とで、相違している。【０２３３】
（Ｓ０）次のような初期値設定処理を行う。すなわち、例えば上記バッファ内の受信文字列Ｘの最初の文字を入力文字ＩＳとして取得する。入力文字ＩＳのビット長は、例えば８ビットである。ワードアドレスＡＤＤＲに初期値ＡＤＤＲ０、例えば図５０中の００を代入する。また、文字列Ｘ中の入力文字ＩＳの位置を示すＣＯＵＮＴに初期値０を代入する。【０２３４】
（Ｓ１）ＲＡＭ１４ＡのワードアドレスＡＤＤＲから１ワード、例えば６４ビットのデータを読み出す。この１ワードは、ベースアドレスＢＡＤＤＲと、相対アドレス関数決定情報ＲＡＦＤＩと、出力状態Ｑと、消費フラグＦとからなる。相対アドレス関数決定情報ＲＡＦＤＩは、上述の１６ビットの共通部一致判定情報ＣＭＮＩＮＦＯと１６ビットの非共通部ビットマップＢＩＴＭＡＰとからなる。ベースアドレスＢＡＤＤＲは最大３０ビットとすることができる。【０２３５】
（Ｓ５）Ｑ＝１であればステップＳ６へ進み、そうでなければステップＳ７へ進む。【０２３６】
（Ｓ６）ベースアドレスＢＡＤＤＲ及びＣＯＵＮＴの値を、処理終了後の出力情報としてＲＡＭ１４Ａに格納しておく。【０２３７】
（Ｓ７）Ｆ＝‘０’であれば、現在の入力文字ＩＳを持ち越すのでステップＳ２へ進み、そうでなければステップＳ８へ進む。【０２３８】
（Ｓ８）文字列Ｘが空でなければステップＳ９へ進み、空であればキーワード検出処理を終了し、後処理プログラムにおいて、ステップＳ６で格納したデータがあれば、例えばこれに関係した情報を表示装置１８に表示させる。【０２３９】
（Ｓ９）文字列Ｘから次の入力文字ＩＳを取得し、ＣＯＵＮＴを１だけインクリメントする。【０２４０】
（Ｓ２Ａ）入力文字ＩＳと相対アドレス関数決定情報ＲＡＦＤＩとに基づいて、上述のように相対アドレスＲＡＤＤＲを算出する。この処理は、図１３のそれと同一である。但し、図１３のステップＳ１Ｂにおいて、相対アドレスＲＡＤＤＲの値を１だけ小さくし、ＲＡＤＤＲ＝Ｂ＊２S＋ＯＦＳとする。【０２４１】
（Ｓ３）ワードアドレスＡＤＤＲに相対アドレスＲＡＤＤＲを加算したものを、新たなワードアドレスＡＤＤＲとして求め、ステップＳ１へ戻る。【０２４２】
このような処理により、ＲＡＭ１４Ａから１ワードのデータを読み出す毎に、次の状態に遷移することができ、高速処理が可能となるという効果を奏する。
【実施例１２】
【０２４３】
上記実施例１１では、ソフトウェアによりキーワード検出処理を行っているので、大量のデータを高速処理するのには向かない。そこで、この処理をハードウェアで行う構成を、本発明の実施例１２として次に説明する。【０２４４】
図５２は、図５１に対応した有限オートマトン実行装置を示す概略ブロック図である。図５３は、図５２の装置の動作を示す概略タイムチャートである。【０２４５】
ＲＡＭ１４Ａには、上述のデータ構造の有限オートマトンが格納される。【０２４６】
相対アドレス算出回路２０Ｄは、図５１のステップＳ２Ａでの処理をハードウェアで実行するものである。相対アドレス算出回路２０Ｄとしては、図１６及び図１７の相対アドレス算出回路２０をそのまま用いることができる。また図１７の非共通部抽出・分割回路３４の替わりに、図２７の非共通部抽出・分割回路３４Ｐ又は図３０の非共通部抽出・分割回路３４Ｑを用いて処理を高速化してもよい。【０２４７】
制御回路２５Ｂはまず、レジスタ２３に例えば０を、消費フラグＦ、出力状態Ｑ及びカウンタ２７にそれぞれ０を、初期設定する。【０２４８】
ＲＡＭ１４Ａの、レジスタ２３で指定されたワードアドレスＡＤＤＲ（図５３のＤ１）から、例えば６４ビットのデータ（ベースアドレスＢＡＤＤＲ、相対アドレス関数決定情報ＲＡＦＤＩ、出力状態Ｑ及び消費フラグＦ）が読み出され、制御回路２５Ｂからのクロックパルスにより、これらがレジスタ２１に保持される（Ｄ３）。【０２４９】
Ｑ＝‘１’の場合、例えば、不図示のＣＰＵに割込が掛かって、レジスタ２１のベースアドレスＢＡＤＤＲ及びカウンタ２７の出力がこのＣＰＵで読み込まれる。【０２５０】
一方、文字列Ｘの一部がＦＩＦＯのキュー２４に保持され、その１文字が入力文字ＩＳとして取り出される。消費フラグＦが‘１’である場合、制御回路２５からのクロックＣＬＫの１パルスがアンドゲート２６を介してレジスタ２２、キュー２４及びカウンタ２７のそれぞれのクロック入力端に供給される。これにより、上記入力文字ＩＳがレジスタ２２に保持され（Ｄ８）、カウンタ２７が‘１’だけインクリメントされる。【０２５１】
相対アドレス算出回路２０Ｄは、レジスタ２１に保持された相対アドレス関数決定情報ＲＡＦＤＩとレジスタ２２に保持された入力文字ＩＳとに基づいて、相対アドレスＲＡＤ
ＤＲを算出し出力する。ＲＡＤＤＲは、制御回路２５Ｂからのクロックパルスにより、レジスタ２８に保持される（Ｄ４）。レジスタ２８の出力と、レジスタ２１のベースアドレスＢＡＤＤＲ出力とが加算回路３０で加算され、その結果が、制御回路２５Ｂからのクロックパルスにより、レジスタ２３に保持される（Ｄ７）。【０２５２】
このような処理が繰り返されて、図５１の処理がハードウェア的に行われる。
【実施例１３】
【０２５３】
実施例１１及び１２で用いられる、オートマトンのメモリ内データ構造は、相対アドレス関数決定情報ＲＡＦＤＩが各ワードに付加されているので、その重複が生じ、実施例１〜１０のそれよりも記憶効率が悪い。【０２５４】
しかし、ＢＡＤＤＲとＲＡＦＤＩとの組を１ワードに格納したことにより、実施例１〜１０の場合にはやりくりできないが、ＢＡＤＤＲのビット長を減少させるとともにＢＩＴＭＡＰのビット長を増加させて、メモリの記憶効率をより高めることが可能となる。【０２５５】
図５４は、これを行った、本発明の実施例１３に係る有限オートマトンのメモリ内データ構造概略を示す図である。【０２５６】
このデータ構造では、ワードアドレスＡｉに格納されている相対ベースアドレスＲＢＡＤＤＲｉとワードアドレスＡｉとの和を相対アドレスＲＡＤＤＲｉとすることにより、相対ベースアドレスＲＢＡＤＤＲｉのビット長を短くして、非共通部ビットマップＢＩＴＭＡＰのビット長を大きくしている。ＢＡＤＤＲｉがこの相対ベースアドレスＲＢＡＤＤＲｉの範囲外に存在するときには、相対ベースアドレスＲＢＡＤＤＲｉを使用できないので、１ビットのアドレスモードＡＭを相対ベースアドレスＲＢＡＤＤＲｉ又は相対アドレスＲＡＤＤＲとともにワードアドレスＡｉに格納している。例えば、ＡＭ＝‘１’のとき相対ベースアドレスＲＢＡＤＤＲ、ＡＭ＝‘０’のとき相対アドレスＲＡＤＤＲであるとする。【０２５７】
このようなベースアドレスの相対アドレス化に伴って、非共通部ビットマップＢＩＴＭＡＰを２倍の３２ビットにすると、相対ベースアドレスＲＢＡＤＤＲを３０−（１＋１６）＝１３ビットにすることができる。【０２５８】
なお、入力文字が同一であっても、非共通部ビットマップＢＩＴＭＡＰのビット長が１６ビットであるか３２ビットであるかにより相対アドレスが異なるので、遷移先データがどちらを用いて構成されているかでアドレスモードＡＭの値が定まる。したがって、同じ遷移先状態について、遷移元の状態により相対ベースアドレスＲＢＡＤＤＲの到達範囲内になったり到達範囲外になったりする場合には、非共通部ビットマップＢＩＴＭＡＰのビット長が１６ビットである遷移先データと３２ビットである遷移先データとをＲＡＭ１４Ａに格納しておく必要がある。【０２５９】
図５５は、上記のような相対ベースアドレスＲＢＡＤＤＲを用いることができる有限オートマトン実行装置のハードウェア構成を示す概略ブロック図である。【０２６０】
レジスタ２１のＲＢＡＤＤＲ出力（１３ビット）が加算回路６７の一方の入力端に供給され、他方の入力端にレジスタ２３の出力がワードアドレスＡｉとして供給され、その加算結果がセレクタ６８の一方の入力端に供給される。【０２６１】
アドレスモードＡＭが‘１’であるとき、セレクタ６８により加算回路６７の出力がセレクタ６８で選択され、ベースアドレスＢＡＤＤＲとして加算回路３０の一方の入力端に
供給される。加算回路６７による加算と並行して、相対アドレス算出回路２０Ｄにより相対アドレスＲＡＤＤＲが求められ、これがレジスタ２８に保持され、この値とセレクタ６８の出力とが加算回路３０で加算され、その結果がレジスタ２３に保持される。【０２６２】
ＡＭ＝‘０’であるとき、２９ビットのベースアドレスＢＡＤＤＲがセレクタ６８により選択され、これがレジスタ２８の出力と加算回路３０で加算されて、レジスタ２３に保持される。【０２６３】
本実施例１３によれば、ベースアドレスの相対アドレス化により非共通部ビットマップＢＩＴＭＡＰのビット長を大きくして遷移先情報量をさらに低減することが可能となる。
【実施例１４】
【０２６４】
図５６は、本発明の実施例１４に係る有限オートマトンのメモリ内データ構造の具体例を示す説明図である。【０２６５】
このデータ構造は、図３４に対応している。このデータ構造を用いて処理をソフトウェアで行う場合、図５１のステップＳ２Ａで、図３６に示す処理を行う。但し、ステップＳ１Ｄ及びＳ１Ｂ１においてＲＥＬＡＤＤＲの値を１だけ小さくし、それぞれＲＡＤＤＲ＝０及びＲＡＤＤＲ＝Ｂ＊２S＋ＯＦＳ＋１とする。【０２６６】
図５７は、このデータ構造を用いて処理をハードウェアで行うオートマトン実行装置のブロック図である。【０２６７】
この装置の相対アドレス算出回路２０Ｅは、図３８の相対アドレス算出回路２０Ｂにおいて、セレクタ３３４の固定値入力−１の替わりに０を用いたものと同一である。また、図１４の加算回路２９を用いて処理を高速化している。【０２６８】
さらに、入力文字ＩＳに対し遷移せずに元の状態に留まる場合の処理を高速化するため、比較回路６９を用いている。比較回路６９は、レジスタ２３に保持されたアドレスと、次に保持しようとするアドレスとを比較し、その結果を制御回路２５Ｄに供給する。制御回路２５Ｄは、この比較結果が一致を示している場合、ＲＡＭ１４Ａに同一データを読み出させるのを省略して、レジスタ２１に保持されている内容を再利用させるとともに、クロックＣＬＫのパルスを１個アンドゲート２６に供給して、次の入力文字ＩＳを相対アドレス算出回路２０Ｅに供給させる。【０２６９】
他の点は、実施例１２と同一である。【０２７０】
他の実施例においても、前記再利用を行うように構成することもできるが、本実施例の場合、ＦＡＩＬＵＲＥ遷移先相対アドレスが０であり、且つ、ベースアドレスと相対アドレス関数決定情報とが１ワードに格納されているので、再利用の為の付加構成が特に簡単となる。このような簡単な再利用構成は、図５６のデータ構造の特性に基づくものであり、従来ではできなかったものである。【０２７１】
なお、本発明には外にも種々の変形例が含まれる。【０２７２】
例えば、図５０の変形例として、図５８に示すメモリ内データ構造の有限オートマトンを用いることができる。このデータ構造は、図３１に対応している。このデータ構造を用いて処理をソフトウェアで行う場合、図５１のステップＳ２Ａで、図３２に示す処理を行う。但し、ステップＳ１ＢにおいてＲＥＬＡＤＤＲの値を１だけ小さくし、ＲＡＤＤＲ＝Ｂ＊２S＋ＯＦＳとする。このメモリ内データ構造を用いて処理をハードウェアで行う場
合、図５５の相対アドレス算出回路２０Ｄとして図３３の相対アドレス算出回路２０Ａを用いる。但し、セレクタ３３５の固定値入力−２を−１に変更する。【０２７３】
図５０、５６及び５８のメモリ内データ構造の変形例として、部分的に実施例８又は９の方法を適用し状態を分割したものであってもよい。実施例９の方法を適用したメモリ内データ構造を用いて処理をソフトウェアで行う場合、図５１のステップＳ２Ａで、図４４に示す処理を行う。但し、ステップＳ１Ｄ及びＳ１Ｂ１においてＲＥＬＡＤＤＲの値を１だけ小さくし、それぞれＲＡＤＤＲ＝０及びＲＡＤＤＲ＝Ｂ＊２S＋ＯＦＳ＋１とする。このデータ構造を用いて処理をハードウェアで行う場合、図５２又は図５５の相対アドレス算出回路２０Ｄとして、図４６の相対アドレス算出回路２０Ｃを用いる。但し、セレクタ３３４の固定値入力−１を０に変更し、回路３３３でＲＡＤＤＲ＝Ｂ＊２S＋ＯＦＳ＋１を算出する。【０２７４】
また、以上の実施例の構成要素の異なる組み合わせも本発明に含まれ、例えば図５５の装置に、図５７の比較回路６９を適用した構成であってもよい。【０２７５】
さらに、上記いずれの実施例においても、ベースアドレスＢＡＤＤＲを固定値だけシフトした構成であってもよい。【０２７６】
また、実施例６及び７において、投機的先読みワード数を２以上にしてもよい。【０２７７】
出力状態フラグＱをＢＬＯＣＫＩＮＦＯと同じアドレスに格納する替わりに、出力関数用メモリを用いてもよい。すなわち、読み出したＢＡＤＤＲで該出力関数用メモリをアドレス指定して、出力状態であるか否かの情報を読み出す構成であってもよい。【０２７８】
さらに、有限オートマトンが格納されるメモリは、ＳＲＡＭ、ランバスメモリ又はフラッシュメモリであってもよく、用途に応じて適宜選択される。有限オートマトンをファイルとして記録媒体に格納した後メモリにロードする場合における該記録媒体は、磁気ディスク、光ディスク、フラッシュメモリ等のいずれであってもよい。【０２７９】
以上の説明から明らかなように、本発明には、以下のような付記項１〜１８の構成も含まれる。【０２８０】
［付記項１］
入力文字と、相対アドレス関数決定情報とに基づいて、現状態を示すベースアドレスに対応した次状態情報格納先相対アドレスを求める有限オートマトン実行装置用相対アドレス算出回路であって、該相対アドレス関数決定情報は、ＧＯＴＯ遷移文字セットの共通部を該入力文字が含んでいるか否かを判定するための共通部一致判定情報と、該ＧＯＴＯ遷移文字セットから少なくとも該共通部を除いた部分である非共通部のいずれかを該入力文字が含んでいるか否かを判定するための非共通部存否情報とを含み、
該共通部一致判定情報が示す該共通部が該入力文字に含まれているか否かを判定する共通部不一致判定回路と、
該共通部不一致判定回路が否定判定した場合に、ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスを出力する出力回路と、
を有することを特徴とする有限オートマトン実行装置用相対アドレス算出回路。【０２８１】
この構成によれば、該共通部不一致判定回路により、該共通部一致判定情報が示す該共通部が該入力文字に含まれているか否かを判定し、否定判定した場合に、ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスを該出力回路から出力するので、簡単な構成で高速に相対アドレスを求めることができるという効果を奏する。【０２８２】
［付記項２］
該非共通部存否情報は、２NビットのそれぞれがＧＯＴＯ遷移存否を示す非共通部ビットマップを含み、ここにＮは１＜Ｎ＜ＩＳＬを満たす整数の所定値であり、ＩＳＬは該入力文字のビット長であり、
該非共通部に対応するビットを該入力文字から抽出し、該非共通部のビット長ＮＣＬが該所定値Ｎより大であれば該非共通部に対応するビットのうちＮビットをブロックＢＬＫとし残りの（ＮＣＬ−Ｎ）ビットをブロック内オフセットＯＦＳとし（ＮＣＬ−Ｎ）をブロックサイズＳとして出力し、そうでなければ該非共通部に対応するビットを該ブロックＢＬＫとし該ブロック内オフセットＯＦＳを０とし該ブロックサイズを０として出力する非共通部抽出・分割回路と、
該非共通部ビットマップ上の、該ブロックＢＬＫの値に対応した位置のビットが、第１値であるか否かを判定する不存在判定回路を備えた非共通部処理回路と、
をさらに有し、
該出力回路はさらに、該不存在判定回路が肯定判定した場合に該ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスを出力する、
ことを特徴とする付記項１に記載の相対アドレス算出回路。【０２８３】
この構成によれば、該非共通部抽出・分割回路が該非共通部をブロックＢＬＫとオフセットＯＦＳとに分割し、かつ、ブロックサイズＳを求めるので、その後の処理が簡単になり、また、該非共通部処理回路により、該非共通部ビットマップ上の、該ブロックＢＬＫの値に対応した位置のビットが、第１値であるか否かを判定し、肯定判定した場合に該ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスを該出力回路が出力するので、
該共通部不一致判定回路により肯定判定された場合であっても、簡単な構成で高速に相対アドレスを求めることができるという効果を奏する。【０２８４】
［付記項３］
該出力回路は、
第１入力端と第２入力端とを備え、該第１入力端に固定値が供給されるセレクタと、
該共通部不一致判定回路が否定判定し又は該不存在判定回路が否定判定した場合に該セレクタに対し該第１入力端の値を、該ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスとして選択的に出力させる選択制御回路と、
を有することを特徴とする付記項２に記載の相対アドレス算出回路。【０２８５】
この構成によれば、該出力回路の該セレクタにより選択された固定値が該ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスとして出力されるので、簡単な構成で高速に相対アドレスを求めることができるという効果を奏する。【０２８６】
［付記項４］
該非共通部処理回路はさらに、
該ブロックＢＬＫをデコードする第１デコーダと、
該第１デコーダの出力が示す、該非共通部ビットマップ上の位置から該非共通部ビットマップの一端までに含まれる第２値のビットの個数より１だけ小さい値をブロックナンバＢとして求めるブロックナンバ検出回路と、
を有することを特徴とする付記項３に記載の相対アドレス算出回路。【０２８７】
この構成によれば、簡単な構成で該ブロックナンバＢを求めることができるという効果を奏する。【０２８８】
［付記項５］
該出力回路はさらに、該ブロックナンバＢ、該ブロックサイズ指数Ｓ及び該ブロック内オフセットＯＦＳに基づき、Ｂ＊２S＋ＯＦＳ＋（定数）を求めて、該セレクタの第２入力端に供給する演算回路を有し、
該選択制御回路は、該共通部不一致判定回路が肯定判定し且つ該不存在判定回路が肯定判定した場合に該セレクタに対し該第２入力端の値を、遷移先に対応した相対アドレスとして選択的に出力させる、
ことを特徴とする付記項４に記載の相対アドレス算出回路。【０２８９】
［付記項６］
該共通部一致判定情報は、該共通部の各ビット位置を示すマスクＭＡＳＫと、該共通部の各ビット位置に対応した値を含むコモンＣＭＮとを有し、
該共通部不一致判定回路は、該入力文字と該マスクＭＡＳＫとの論理積が該コモンＣＭＮと一致するとき該入力文字に該共通部が含まれていると判定する、
ことを特徴とする付記項５に記載の相対アドレス算出回路。【０２９０】
この構成によれば、該入力文字と該マスクＭＡＳＫとの論理積が該コモンＣＭＮと一致するとき該入力文字に該共通部が含まれていると判定するので、この判定を簡単な構成で高速に行うことができるという効果を奏する。【０２９１】
［付記項７］
該共通部一致判定情報は、該共通部の各ビット位置を示すマスクＭＡＳＫと、該共通部の各ビット位置に対応した値を含むコモンＣＭＮとを有し、
該共通部不一致判定回路は、該入力文字と該マスクＭＡＳＫとの論理積と、該コモンＣＭＮと該マスクＭＡＳＫとの論理積とが一致するとき、該入力文字に該共通部が含まれていると判定する、
ことを特徴とする付記項５に記載の相対アドレス算出回路。【０２９２】
この構成によれば、該入力文字と該マスクＭＡＳＫとの論理積と、該コモンＣＭＮと該マスクＭＡＳＫとの論理積とが一致するとき、該入力文字に該共通部が含まれていると判定するので、ビット数を増加させることなく、該該コモンＣＭＮを共通値以外の目的に使用することができるという効果を奏する。【０２９３】
［付記項８］
該マスクＭＡＳＫと該コモンＣＭＮとが全ビット不一致であるか否かを判定する全ビット不一致判定回路をさらに有し、
該選択制御回路はさらに、該全ビット不一致判定回路が肯定判定した場合にも、該セレクタに対し該第１入力端の値を、該ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスとして選択的に出力させる、
ことを特徴とする付記項６又は７に記載の相対アドレス算出回路。【０２９４】
この構成によれば、該マスクＭＡＳＫと該コモンＣＭＮとが全ビット不一致であると判定した場合に該セレクタに対し、該ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスを選択的に出力させるので、簡単な構成で高速に相対アドレスを求めることができるという効果を奏する。【０２９５】
［付記項９］
該マスクＭＡＳＫと該コモンＣＭＮとが全ビット不一致であるか否かを判定する全ビット不一致判定回路をさらに有し、
該セレクタはさらに、固定値が供給される第３入力端を有し、
該選択制御回路はさらに、該全ビット不一致判定回路が肯定判定した場合には優先的に
、該セレクタに対し該第３入力端の値を、該ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスとして選択的に出力させる、
ことを特徴とする付記項６又は７に記載の相対アドレス算出回路。【０２９６】
この構成によっても、該マスクＭＡＳＫと該コモンＣＭＮとが全ビット不一致であると判定した場合に該セレクタに対し、該ＦＡＩＬＵＲＥ遷移先に対応した相対アドレスを選択的に出力させるので、簡単な構成で高速に相対アドレスを求めることができるという効果を奏する。【０２９７】
［付記項１０］
該相対アドレス関数決定情報はさらに、該入力文字から該共通部及び該非共通部に対応する部分を除いた部分であるドント・ケア部の情報を含み、
該ドント・ケア部の情報は、該コモンＣＭＮの該ドント・ケア部に対応する各ビットが該第２値であることに対応しており、
該マスクＭＡＳＫと該コモンＣＭＮとの論理和を合成マスクＣＭＡＳＫとして求めるＯＲ回路をさらに有し、
該非共通部抽出・分割回路は、該入力文字から、該合成マスクＣＭＡＳＫに含まれる該第１値のビットを、該非共通部に対応するビットとして抽出する、
ことを特徴とする付記項７に記載の相対アドレス算出回路。【０２９８】
この構成によれば、該マスクＭＡＳＫと該コモンＣＭＮとの論理和を合成マスクＣＭＡＳＫとして求め、該合成マスクＣＭＡＳＫに含まれる該第１値のビットを、該非共通部に対応するビットとして抽出するので、該コモンＣＭＮをドント・ケアとして使用する場合にも、そうでない場合と統一して取り扱うことができ、構成が簡単になるという効果を奏する。【０２９９】
［付記項１１］
該非共通部抽出・分割回路は、該入力文字の該非共通部を上位ＮＣＬビットとし下位（ＩＳＬ−ＮＣＬ）ビットの各ビット値を該第１値とするＩＳＬビットの、上位ＮビットをブロックＢＬＫとして求め、下位（ＩＳＬ−Ｎ）ビットのビット位置を逆順にしたものをブロック内オフセットＯＦＳとして求める、
ことを特徴とする付記項２乃至１０のいずれか１つに記載の相対アドレス算出回路。【０３００】
この構成によれば、簡単な構成で、該非共通部のビット数ＮＣＬの値によらず該非共通部を該ブロックＢＬＫと該ブロック内オフセットＯＦＳとに高速に分割できるという効果を奏する。【０３０１】
［付記項１２］
該非共通部抽出・分割回路は、
クロック入力端にクロックが供給され、該入力文字が保持される第１シフトレジスタと、
クロック入力端に該クロックが供給され、該マスクＭＡＳＫ又は該合成マスクＣＭＡＳＫが保持される第２シフトレジスタと、
該第２シフトレジスタのシリアル出力端と該クロックとの論理積に対応したものを出力する第１論理回路と、
クロック入力端に該第１論理回路の出力が供給され、シリアル入力端が該第１シフトレジスタのシリアル出力端に接続された第３シフトレジスタと、
を有し、該第３シフトレジスタの上位Ｎビットから該ブロックＢＬＫが取り出され、該第３シフトレジスタの下位（ＩＳＬ−Ｎ）ビットのビット位置を逆順にしたものが該ブロック内オフセットＯＦＳとして取り出される、
ことを特徴とする付記項１１に記載の相対アドレス算出回路。【０３０２】
この構成によれば、該第１〜３シフトレジスタを用いた簡単な構成で、該非共通部を該ブロックＢＬＫと該ブロック内オフセットＯＦＳとに分割できるという効果を奏する。【０３０３】
［付記項１３］
該非共通部抽出・分割回路はさらに、
該第１論理回路の出力パルスをカウントする第１カウンタと、
該第１カウンタのカウントＣＮが該所定値Ｎより大であるか否かを判定する比較回路と、
該比較回路が肯定判定しているときに該第１論理回路の出力パルスを通過させる第２論理回路と、
該第２論理回路の出力パルスをカウントする第２カウンタと、
を備え、該第２カウンタの計数値を該ブロックサイズ指数Ｓとして出力するブロックサイズ指数検出回路を有することを特徴とする付記項１２に記載の相対アドレス算出回路。【０３０４】
この構成によれば、第１及び第２カウンタと比較回路と第２論理回路とを用いた簡単な構成で、該ブロックサイズ指数Ｓを求めることができるという効果を奏する。【０３０５】
［付記項１４］
該非共通部抽出・分割回路は、
該マスクＭＡＳＫ又は該合成マスクＣＭＡＳＫ上の、一方側最端を除く各ビットについて、その一方側隣のビットから該一方側最端ビットまでの該第２値の個数を求める一方側第２値個数検出回路と、
該マスクＭＡＳＫ又は該合成マスク上の該第１値に対応する、該入力文字の一方側最端を除く（ＮＣＬ−１）ビットの各々について、該求められた対応する該第２値の個数だけこのビットをシフトさせたものを出力し、（ＩＳＬ−ＮＣＬ）ビットのそれぞれを該第１値にして他方側へ追加出力するとともに、該マスクＭＡＳＫ又は該合成マスク上の一方側最端が該第１値であれば該入力文字の一方側最端のビットを出力するデマルチプレクサ群と、
を有し、これらＩＳＬビットの出力のうち一方側Ｎビットを該ブロックＢＬＫとし、残り（ＩＳＬ−Ｎ）ビットのビット位置を逆順にしたものを該ブロック内オフセットＯＦＳとする、
ことを特徴とする付記項１１に記載の相対アドレス算出回路。【０３０６】
この構成によれば、該一方側第２値個数検出回路と該デマルチプレクサ群とを用いた簡単な構成で、該非共通部のビット数ＮＣＬの値によらず該非共通部を該ブロックＢＬＫと該ブロック内オフセットＯＦＳとに高速に分割できるという効果を奏する。【０３０７】
［付記項１５］
該非共通部抽出・分割回路はさらに、
該マスクＭＡＳＫ又は該合成マスク上の該第１値をカウントする並列カウンタと、
該並列カウンタのカウントＣＮ０と−Ｎとの和を求める加算回路と、
第１入力端に該加算回路の出力ＣＮ０−Ｎが供給され、第２入力端に０が供給され、該加算回路の符号ビットが負であることを示していれば該第２入力端の値を該ブロックサイズ指数Ｓとして選択的に出力し、そうでなければ該第１入力端の値を該ブロックサイズ指数Ｓとして選択的に出力するセレクタと、
を備えたブロックサイズ指数検出回路を有することを特徴とする付記項１４に記載の相対アドレス算出回路。【０３０８】
この構成によれば、該並列カウンタと該加算回路と該セレクタとを備えた簡単な構成で、該ブロックサイズ指数を高速に求めることができるという効果を奏する。【０３０９】
［付記項１６］
該ブロックナンバ検出回路は、
該第１デコーダの出力が入力され、該第２値を一端側へ尾引させたものを実質的に該一端側へ１ビットシフトさせる第２値尾引１ビット一端側シフト回路と、
該非共通部ビットマップから、該第２値尾引１ビット一端側シフト回路の出力の該第２値に対応する部分を抽出する論理回路と、
該論理回路の出力に含まれる該第２値をカウントし、その結果をブロックナンバＢとして出力する並列カウンタと、
を有することを特徴とする付記項４乃至１０のいずれか１つに記載の相対アドレス算出回路。【０３１０】
この構成によれば、第２値尾引１ビット一端側シフト回路と該論理回路と該並列カウンタとを備えた簡単な構成で、該ブロックナンバＢを高速に求めることができるという効果を奏する。【０３１１】
［付記項１７］
該演算回路は、
出力レジスタと、
該ブロックサイズ指数Ｓをデコードする第２デコーダと、
該出力レジスタの最下位側からＮビットのそれぞれに対応して備えられ、それぞれ該ブロックナンバＢの対応するビットがデータ入力端に供給され、０〜Ｎの範囲内で該第２デコーダの出力に応じたビット数だけ、それぞれ該出力レジスタの対応するビットから上位側へシフトさせて該出力レジスタに供給するデマルチプレクサ群と、
該デマルチプレクサ群の出力と衝突しないようにして、（ＮＣＬ−Ｎ）ビットのブロック内オフセットＯＦＳのそれぞれを、該該出力レジスタの最下位側から対応するビットに供給するゲート回路と、
を有することを特徴とする付記項５乃至１０のいずれか１つに記載の相対アドレス算出回路。【０３１２】
この構成によれば、該出力レジスタと該第２デコーダと該デマルチプレクサ群と該ゲート回路とを備えた簡単な構成で、ＧＯＴＯ遷移先又はＦＡＩＬＵＲＥ遷移先の相対アドレスを高速に求めることができるという効果を奏する。
【図面の簡単な説明】
【０３１３】
【図１】本発明の実施例１に係る有限オートマトンのメモリ内データ構造の概略を従来のそれと対比して示す説明図である。
【図２】有限オートマトンのメモリ内データ構造に対応した相対アドレス関数の説明図である。
【図３】共通部一致判定情報を用いた情報量削減方法と非共通部ビットマップを用いた情報量削減方法と共通部一致判定情報及び非共通部ビットマップを用いた情報量削減方法とのデータ圧縮効果を具体的に示す対比図である。
【図４】有限オートマトンのメモリ内データ構造の具体例を示す説明図である。
【図５】図４に対応した有限オートマトン状態遷移図である。
【図６】（Ａ）は図５中の状態０からの遷移のみを抽出したものを示す図、（Ｂ）は（Ａ）に関する相対アドレス関数決定情報を作成する方法の説明図、（Ｃ）は作成された相対アドレス関数決定情報のメモリ内配置を示す説明図である。
【図７】（Ａ）は図５中の状態１からの遷移のみを抽出したものを示す図、（Ｂ）は（Ａ）に関する相対アドレス関数決定情報のメモリ内配置を示す説明図である。
【図８】（Ａ）は図５中の状態２からの遷移のみを抽出したものを示す図、（Ｂ）は（Ａ）に関する相対アドレス関数決定情報を作成する方法の説明図、（Ｃ）は作成された相対アドレス関数決定情報のメモリ内配置を示す説明図である。
【図９】（Ａ）は図５中の状態３からの遷移のみを抽出したものを示す図、（Ｂ）は（Ａ）に関する相対アドレス関数決定情報作成説明図、（Ｃ）はこの相対アドレス関数決定情報のメモリ内配置説明図である。
【図１０】消費フラグの任意性説明図である。
【図１１】本発明の実施例１に係る有限オートマトンをソフトウェアで実行するための情報処理装置のハードウェア構成を示す概略ブロック図である。
【図１２】このソフトウェアの概略フローチャートである。
【図１３】図１２中のステップＳ２の処理の詳細フローチャートである。
【図１４】本発明の実施例２に係る有限オートマトン実行装置の概略ブロック図である。
【図１５】図１４の装置の動作を示す概略タイムチャートである。
【図１６】図１４中の相対アドレス算出回路２０の構成例を示す概略ブロック図である。
【図１７】図１６の構成をより具体化した概略ブロック図である。
【図１８】（Ａ）は共通部一致判定真理値表を示す図、（Ｂ）はこの真理値表に従って動作する１ビット入力／１ビット出力の共通部一致判定回路図である。
【図１９】（Ａ）は他の、１ビット入力／１ビット出力の共通部一致判定回路図、（Ｂ）は（Ａ）の回路を用いた、図１７中の共通部不一致判定回路の構成例を示す図である。
【図２０】図１７中の非共通部抽出・分割回路を順序回路で構成した例を示す図である。
【図２１】（Ａ）及び（Ｂ）は図２０の回路の非共通部抽出・分割動作説明図である。
【図２２】図２０の回路のブロックサイズ指数検出部動作説明図である。
【図２３】図１７中のブロックアドレス決定回路の構成例を示すブロック図である。
【図２４】図２３中のセットビット尾引・１ビットシフトライト回路の構成例を示す論理回路図である。
【図２５】図２３の回路の動作説明図である。
【図２６】図１７中の相対アドレス出力回路を組み合わせ回路で構成した例を示すブロック図である。
【図２７】本発明の実施例３の非共通部抽出・分割回路図である。
【図２８】（Ａ）は図２７中の上位側セットビット個数検出回路の構成例を示す図、（Ｂ）は他の構成例を示す図である。
【図２９】図２７中のブロックサイズ指数検出回路の構成例を示すブロック図である。
【図３０】図２７の非共通部抽出・分割回路の変形例を示す図である。
【図３１】本発明の実施例４に係る有限オートマトンのメモリ内データ構造説明図である。
【図３２】図３１のデータ構造に対応した相対アドレス算出手順を示すフローチャートである。
【図３３】本発明の実施例５に係る、図３２のソフトウェア構成をハードウェア化した相対アドレス算出回路を示す図である。
【図３４】本発明の実施例６に係る有限オートマトンのメモリ内データ構造説明図である。
【図３５】この有限オートマトンを実行するソフトウェアの概略フローチャートである。
【図３６】図３５のステップＳ２Ａの処理の詳細フローチャートである。
【図３７】本発明の実施例７に係る有限オートマトン実行装置を示す概略ブロック図である。
【図３８】図３７中の相対アドレス算出回路の構成を示すブロック図である。
【図３９】図３７の装置の動作を示すタイムチャートである。
【図４０】本発明の実施例８に係るＧＯＴＯ遷移文字セットのサブセット化説明図であり、（Ａ）は直列多段化前のＧＯＴＯ遷移文字セットとＭＡＳＫとを示し、（Ｂ）は直列多段化後のＧＯＴＯ遷移文字サブセットとＭＡＳＫとを示す図である。
【図４１】（Ａ）は図４０（Ａ）に対応した直列多段化前の単一状態説明、（Ｂ)は図４０（Ｂ）に対応した直列多段化後の複数状態説明図である。
【図４２】本発明の実施例９に係るＧＯＴＯ遷移文字セットの直並列２段遷移化説明図である。
【図４３】（Ａ）は、ＧＯＴＯ遷移文字セットが図４０（Ａ）と同一である場合における、直並列２段遷移の第１段の相対アドレス関数決定情報定め方説明図、（Ｂ）は、第２段の１つの状態に関する相対アドレス関数決定情報定め方説明図である。
【図４４】実施例１〜９のいずれかの相対アドレス関数決定情報と入力文字とが与えられたときの相対アドレス算出手順を示すフローチャートである。
【図４５】本発明の実施例１０に係る相対アドレス算出回路を示す概略ブロック図である。
【図４６】図４５の構成をより具体化したブロック図である。
【図４７】図４６中の共通部不一致判定回路の構成例を示すブロック図である。
【図４８】本発明の実施例１１に係る有限オートマトンのメモリ内データ構造概略を、従来のそれと対比して示す図である。
【図４９】有限オートマトンのメモリ内データ構造概略説明図である。
【図５０】図５の状態遷移図に対応したメモリ内データ構造説明図である。
【図５１】図５０のデータ構造の有限オートマトンを用いてキーワードを検出するプログラムの概略フローチャートである。
【図５２】本発明の実施例１１に係る有限オートマトン実行装置を示す概略ブロック図である。
【図５３】図５２の装置の動作を示す概略タイムチャートである。
【図５４】本発明の実施例１３に係る有限オートマトンのメモリ内データ構造概略説明図である。
【図５５】図５４のデータ構造のメモリを用いた有限オートマトン実行装置の概略ブロック図である。
【図５６】本発明の実施例１４に係る有限オートマトンのメモリ内データ構造概略説明図である。
【図５７】図５６のデータ構造のメモリを用いた有限オートマトン実行装置の概略ブロック図である。
【図５８】メモリ内データ構造の変形例説明図である。
【符号の説明】
【０３１４】
１０  情報処理装置
１１  ＣＰＵ
１２  インタフェース
１３  ＰＲＯＭ
１４、１４Ａ  ＲＡＭ
１５  ハードディスクドライブ
１６  ネットワークアダプタ
１７  入力装置
１８  表示装置
２０、２０Ａ〜２０Ｅ  相対アドレス算出回路
２１、２１Ａ、２２、２３、２８、５７  レジスタ
２４  キュー
２５、２５Ａ〜２５Ｄ  制御回路
２６、３１２ｉ、３４６、３４Ａ  アンドゲート
２７、３４８、３４Ｂ  カウンタ
２９、３０、６５２、６７  加算回路
３１  共通部処理回路
３１１  ＯＲ回路
３１２  共通部抽出回路
３１３ｉ  イクスクルーシブノアゲート
３１３  一致判定回路
３１４  共通部不一致判定回路
３２  ＦＡＩＬＵＲＥ遷移先ブロックナンバ決定回路
３３、３３Ａ、３３Ｂ  出力回路
３３１、３３４、３３５、４１、４２、６５３、６８、３Ｓ、３Ｓ１  セレクタ
３３２、３３６  オアゲート
３３３  演算回路
３４、３４Ｐ、３４Ｑ  非共通部抽出・分割回路
３４１  非共通部抽出部
３４２  分割部
３４３、３４４、３４５  シフトレジスタ
３４７  遅延ゲート
３４９、６９  比較回路
３５  ブロックアドレス決定回路
３５１、５５  デコーダ
３５２  ブロックナンバ検出回路
３５３  不存在判定回路
４０、４３  インバータ
４６  セットビット尾引・１ビットシフトライト回路
４７、４９  ＡＮＤ回路
４８  並列カウンタ
５０  ゼロ検出回路
５１〜５４、６２０  デマルチプレクサ
５６  ゲート回路
６１、６１Ａ  上位側セットビット個数検出回路
６２、６２Ａ  デマルチプレクサ群
６３  ＡＮＤ回路
６４  オアゲート群
６４１〜６４７  オアゲート
６５  ブロックサイズ指数検出回路
６５１  並列‘０’カウンタ
６６  全ビット不一致判定回路
Ｘ  文字列
ＩＳ  入力文字
ＮＣＭＮ  非共通部
ＢＬＫ  ブロック
ＯＦＳ  ブロック内オフセット
ＡＤＤＲ、ＡＤＤＲｉ、Ａｉ  ワードアドレス
ＢＡＤＤＲ  ベースアドレス
ＲＡＤＤＲ、ＲＡＤＤＲｉ  相対アドレス
ＲＢＡＤＤＲ、ＲＢＡＤＤＲｉ  相対ベースアドレス
ＭＡＳＫ  マスク
ＣＭＡＳＫ  合成マスク
ＣＭＮＩＮＦＯ  共通部一致判定情報
ＣＭＮ  コモン
ＢＩＴＭＡＰ  非共通部ビットマップ
Ｓ  ブロックサイズ指数
Ｑ  出力状態
Ｆ  消費フラグ
【図１】
2009119802.tif 000003
【図２】
2009119802.tif 000004
【図３】
2009119802.tif 000005
【図４】
2009119802.tif 000006
【図５】
2009119802.tif 000007
【図６】
2009119802.tif 000008
【図７】
2009119802.tif 000009
【図８】
2009119802.tif 000010
【図９】
2009119802.tif 000011
【図１０】
2009119802.tif 000012
【図１１】
2009119802.tif 000013
【図１２】
2009119802.tif 000014
【図１３】
2009119802.tif 000015
【図１４】
2009119802.tif 000016
【図１５】
2009119802.tif 000017
【図１６】
2009119802.tif 000018
【図１７】
2009119802.tif 000019
【図１８】
2009119802.tif 000020
【図１９】
2009119802.tif 000021
【図２０】
2009119802.tif 000022
【図２１】
2009119802.tif 000023
【図２２】
2009119802.tif 000024
【図２３】
2009119802.tif 000025
【図２４】
2009119802.tif 000026
【図２５】
2009119802.tif 000027
【図２６】
2009119802.tif 000028
【図２７】
2009119802.tif 000029
【図２８】
2009119802.tif 000030
【図２９】
2009119802.tif 000031
【図３０】
2009119802.tif 000032
【図３１】
2009119802.tif 000033
【図３２】
2009119802.tif 000034
【図３３】
2009119802.tif 000035
【図３４】
2009119802.tif 000036
【図３５】
2009119802.tif 000037
【図３６】
2009119802.tif 000038
【図３７】
2009119802.tif 000039
【図３８】
2009119802.tif 000040
【図３９】
2009119802.tif 000041
【図４０】
2009119802.tif 000042
【図４１】
2009119802.tif 000043
【図４２】
2009119802.tif 000044
【図４３】
2009119802.tif 000045
【図４４】
2009119802.tif 000046
【図４５】
2009119802.tif 000047
【図４６】
2009119802.tif 000048
【図４７】
2009119802.tif 000049
【図４８】
2009119802.tif 000050
【図４９】
2009119802.tif 000051
【図５０】
2009119802.tif 000052
【図５１】
2009119802.tif 000053
【図５２】
2009119802.tif 000054
【図５３】
2009119802.tif 000055
【図５４】
2009119802.tif 000056
【図５５】
2009119802.tif 000057
【図５６】
2009119802.tif 000058
【図５７】
2009119802.tif 000059
【図５８】
2009119802.tif 000060
【国際調査報告】
2009119802.tif 000061
2009119802.tif 000062