for (i = minec; i <= maxec; ++i)
if (state[i] != SAME_TRANS)
if (state[i] != 0 || deflink != JAMSTATE) {
nxt[tblbase + i] = state[i];
chk[tblbase + i] = statenum;
}
if (baseaddr == firstfree)
/* Find next free slot in tables. */
for (++firstfree; chk[firstfree] != 0; ++firstfree) ;
tblend = MAX (tblend, tbllast);
从 以 上 的 算 法 中 可 以 看 到 firstfree= base[state]+sym ( sym 代 表 EC 或 者 meta-
EC),因此 chk[firstfree] = chk[base[state]+sym] = state 如果成立,则表示
存在这个转换表项,就将 nxt[firstfree] = nxt[base[state]+sym] = onenxt 的值
赋给 next(下一表项)
二. 一个例子:
文件内容:
''
# !()*+,-'.*/00&12
345346758 !()*9-'.*/00&12
3675: !()*;-'.*/00&12
*<* !()*=>?-'.*/00&12
*8* !()*=>?-'.*/00&12
*<8*)18*8<* !()*= 9=-'.*/00&12
''
")!@/$!88!@1
A
00&)12
B
00C!)1
A
!!2
B
输出的各类表项:
D-.!.!.EF&,.G&!.!.G&..G&HG&&
评论0