public function examineStateChange(&$sToken, ParseState $aParseState) { if ($sToken !== 'TABLE' and $sToken !== 'TABLES') { return false; } $aParseState->arrTree[] = $sToken; $sOriToken = $sToken; // IF NOT EXISTS $arrTokenList = array('IF', 'NOT', 'EXISTS'); while (1) { $sToken = next($aParseState->arrTokenList); if (empty($arrTokenList) or array_shift($arrTokenList) !== $sToken) { break; } $aParseState->arrTree[] = $sToken; } // 到头了, table/tables 后面没有内容 if ($sToken === false) { prev($aParseState->arrTokenList); array_pop($aParseState->arrTree); $sToken = $sOriToken; return false; } else { if (strtolower($sToken) === 'status') { $aParseState->arrTree[] = $sToken; $sToken = next($aParseState->arrTokenList); } } // 遇到 TABLE ,检查下一个token 是否是有效的表名 // $sToken = next($aParseState->arrTokenList) ; return parent::examineStateChange($sToken, $aParseState); }