public function parse(TokenPool $aTokenPool, INonlinearIterator $aTokenPoolIter, State $aState) { $aOriToken = $aTokenPoolIter->current(); if (!$aOriToken or $aOriToken->tokenType() != T_USE) { return; } $aTokenPoolIter = clone $aTokenPoolIter; $aNewToken = new UseDeclare($aOriToken); $bFoundAs = false; for ($aTokenPoolIter->next(); $aToken = $aTokenPoolIter->current() and $aToken->tokenType() != Token::T_SEMICOLON; $aTokenPoolIter->next()) { if ($aToken->tokenType() == T_STRING) { $aNewToken->addNameToken($aToken); } else { if ($aToken->tokenType() == T_AS) { $bFoundAs = true; break; } } } // 寻找 as if ($bFoundAs) { $aAsNameToken = null; for ($aTokenPoolIter->next(); $aToken = $aTokenPoolIter->current() and $aToken->tokenType() != Token::T_SEMICOLON; $aTokenPoolIter->next()) { if ($aToken->tokenType() == T_STRING) { $aAsNameToken = $aToken; break; } } if (!$aAsNameToken) { throw new ClassCompileException(null, $aNewToken, "编译class时遇到错误,as关键字后没有有效的名称"); } $aNewToken->setAsNameToken($aAsNameToken); } $aTokenPool->replace($aOriToken, $aNewToken); $aTokenPool->addUseDeclare($aNewToken); }
public function addUseDeclare(UseDeclare $aUseToken) { if (!($sName = $aUseToken->name())) { throw new ClassCompileException(null, $aUseToken, "编译class时遇到无效的 use 关键词"); } $this->arrNamespaces[$sName] = $aUseToken->fullName(); }