110
|
1 typedef struct transition {
|
|
2 CharClassPtr condition;
|
|
3 BitVectorPtr nextState;
|
|
4 struct transition *next;
|
|
5 } Transition, TransitionPtr;
|
|
6
|
|
7
|
|
8 typedef struct state {
|
|
9 TransitionPtr transition;
|
|
10 struct state *next;
|
|
11 } State; StatePtr;
|
|
12 /*
|
|
13 正規表現木を辿って transition のList をつくる
|
|
14 HcarClass のかさなりを判定して重なりのない新しいCharClassをつくる
|
|
15 重なっている状態はbitvectorのorをとる
|
|
16 重なっている状態はそれぞれの状態について木をたどる
|
|
17
|
|
18 nextState == 0 は正規表現の末端を表す
|
|
19 nextState == 1 は受理状態を表す
|
|
20 正規表現のノードの番号 n に対応する 2^n のbitをセットした状態
|
|
21
|
|
22
|
|
23 | の場合は両方のListを結合する
|
|
24 + の場合は左のノードに * がある場合は右のリストも結合する
|
|
25 左のノードにあすたがない場合は、右のほうだけみる
|
|
26 * は直下のリストを使って、次の状態を自分自身にする
|
|
27 */
|