Cerium 上での正規表現の実装
|
Masataka Kohagura 4th, August , 2015
|
研究目的
正規表現はオートマトンに変換することができ、 そしてオートマトンの受理の問題は Class NC と呼ばれる問題でもある。
この問題は計算機の台数が多ければ多いほど高速化できるという特徴を持ち、並列化に向いている問題といえる。
コンピュータの動作やゲームの動作などの多くの問題はオートマトンの受理問題に落としこむことができるので、この問題を解決すれば様々な問題に対応できるようになる。
本研究では正規表現を並列処理で実装することによってこの問題を解決し、Class NC問題 に対応するライブラリを作成する。
今日までにしたこと
- とりあえず動くところまではプログラムを直した(若干バグが)
現在していること
正規表現の parser tree から subset constraction に変換するプログラムを書いている途中
- Parser Tree のノードに word や CharClass を挿れる(今は一文字のみ)
CharClass を Binary Tree で表現する
- 正規表現の Parser Tree のノードに Character Class (例 : [a-z])が含まれている場合、Character Class を二分木で表現する
Character Class が正規表現内に複数含まれる場合
複数の Character Class の範囲が重複する場合
- Character Class Tree を Merge する
どのようなリスト構造か
typedef struct bitVector {
int arrayNum;
unsigned long *bitContainer;
}BitVector,*BitVectorPtr;
typedef struct bitVectorList {
bitVectorList *self;
BitVectorPtr bi;
bitVectorList* initBvl;
bitVectorList* next[256];
}BitVectorList, *BitVectorListPtr;
- BitVectorPtr->bitContainer に状態を格納する。
- BitVectorListPtr->next[c] は 'c' という文字が入力されたときの BitVectorListPtr の遷移先(アドレス)を格納している
-