コード例 #1
0
ファイル: UseDeclareParser.php プロジェクト: JeCat/framework
 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);
 }
コード例 #2
0
ファイル: TokenPool.php プロジェクト: JeCat/framework
 public function addUseDeclare(UseDeclare $aUseToken)
 {
     if (!($sName = $aUseToken->name())) {
         throw new ClassCompileException(null, $aUseToken, "编译class时遇到无效的 use 关键词");
     }
     $this->arrNamespaces[$sName] = $aUseToken->fullName();
 }