当向前指针将越过某半区的边界时,则由扫 描器在另一半区装入N个新字符,向前指针 便从新装入字符的半区的开始位置继续扫描, 只要单词符号的长度<N,那么用这种扫描缓 冲区来识别单词符号是安全的。按照这种方 式,每当向前指针向前移动时均需测试是否 已到达所在半区之边界,若是,则在另半区 装入新的内容,如图34所示: 16
16 当向前指针将越过某半区的边界时,则由扫 描器在另一半区装入N个新字符,向前指针 便从新装入字符的半区的开始位置继续扫描, 只要单词符号的长度≤N,那么用这种扫描缓 冲区来识别单词符号是安全的。按照这种方 式,每当向前指针向前移动时均需测试是否 已到达所在半区之边界,若是,则在另半区 装入新的内容,如图3.4所示:
if( forward到达左半区末尾y 重装右半区; forward=forward+1 else if( orward到达右半区末尾) 重装左半区; 将 forward移至左半区起点; ese forwardforward+1 图34向前指针移动时的测试
17 if (forward到达左半区末尾 ) { 重装右半区 ; forward=forward+ 1 ; } else if (forward到达右半区末尾 ) { 重装左半区 ; 将forward移至左半区起点 ; } else { forward=forward+ 1 ; }图3.4 向前指针移动时的测试
除了在左半区的末尾外,在其他情况下,向前指 移动时都要测试两次,如果在左、右半区末尾附加 个结尾标记eof,如图3.5所示: L.thlenrlelaboiddnlextchDlof 图35附有结尾标记的扫描缓冲区 18
18 除了在左半区的末尾外,在其他情况下,向前指针 移动时都要测试两次,如果在左、右半区末尾附加 一个结尾标记eof,如图3.5所示: … t h e n r e eof d ( n e x t c h ) eof 图3.5 附有结尾标记的扫描缓冲区 a …
在这种情况下,向前指针移动时的测试如图36所示 forward=forward+1 if (forward!=eof if( (forward到达左半区末尾 重装右半区; forward=forward+1 else if( forward到达右半区末尾) 重装左半区; 将 forward移至左半区起点; eise {词法分析结束; 图3.6具有结尾标记的测试
19 在这种情况下,向前指针移动时的测试如图3.6所示。 forward=forward+1; if (forward != eof) {if (forward到达左半区末尾) {重装右半区; forward=forward+1; } else if (forward到达右半区末尾) {重装左半区; 将forward移至左半区起点; } else {词法分析结束; } } 图3.6 具有结尾标记的测试