|
テーブルを眺めている内に気が付いたが、NodeFlags の値 0,1,3,4,5 は3つのグループ {0,1}, {3}, {4,5} に分かれる。
そして 0, 4 という偶数バージョンはグループの終端に使われている。
ことえりヘルプには載っていない組み合わせも発見。
ca,ci,cu,ce,co で か,し,く,せ,こ になる。
まあ、これはいいが、jhi で「ざ」というのは何?
jyy と zyy は何も残さずに消えるし。
結構いい加減なテーブルだ。
と、これは余談。
前回あやふやだった Cursor の -1 は NodeFlags が {0,1} のときは初期状態に戻る。
初期状態が最後の組に当たっているので、Python 使いとしては解り易い。
このとき、Result を出力。
NodeFlags 3 は「っ」の出力にしか使われないし、このとき Cursor は常に -1。
どう解釈しても良いが、「っ」を出力して、入力を破棄せずに初期状態に戻り次の入力として使う、ということかな。
NodeFlags が {4,5} のときは、Cursor は -1 にならない。
ということで、Cursor が -1 の場合の動作も判明したので、全体をまとめておこう。
なお、No. の言及は前回のテーブルの数字から 1 引いたもの。
- サブテーブルとは、先頭の No. で指定され、そこから NodeFlags が偶数になるまで No. の昇順に並んだ、テーブルの行の集合である。
- 初期行とは、サブテーブルの一つで No.240 で指定されるもの。
実行の開始時点では初期行にいる。
- サブテーブルからサブテーブルへの遷移は入力に従って決まる。
- NodeValue が 0 ならば(サブテーブルはただ一つの行からなるはずだ)入力を消費せずに Cursor 値で指定されるサブテーブルに遷移する。
- それ以外の場合、サブテーブルの中の行で NodeValue が入力に合致するものがあればその行の Cursor 値で指定されるサブテーブルに遷移する。
ただし Cursor 値が -1 ならば遷移先は初期行とする。
- 残った場合、即ち、入力に合致する行が無ければ、初期行に遷移する。
- 遷移に際して、次の動作を行う。
- Cursor が 0 以上でかつ NodeFlags が {0,1} かつ Result が 0 ならば、エラーキューに NodeValue を送る。
- Cursor が 0 以上でかつ NodeFlags が {0,1} かつ Result が 0 でないならば、エラーキューに Result を送る。
- Cursor が 0 以上でかつ NodeFlags が {4,5} ならば、エラーキューに NodeValue を送り、出力キューに Result を送る。
- Cursor が -1 ならば、出力キューに Result を送り、出力キューを出力に流して、エラーキューを破棄する。
- Cursor が -1 でかつ NodeFlags が {3} ならば、上記に加え入力を一つ戻す。
- 合致行なしでの遷移の場合、エラーキューを出力に流し、出力キューを破棄する。
と、こんなもんかな。
|