/** * Parses the contents of the tokenizer and generates a node tree based on * the found tokens. * * @return void */ public function parse() { $this->_sourceFile = $this->tokenizer->getSourceFile(); $this->_sourceFile->setCache($this->cache)->setUUID($this->_uuidBuilder->forFile($this->_sourceFile)); $hash = md5_file($this->_sourceFile->getFileName()); if ($this->cache->restore($this->_sourceFile->getUUID(), $hash)) { return; } $this->cache->remove($this->_sourceFile->getUUID()); $this->setUpEnvironment(); $this->_tokenStack->push(); PHP_Depend_Util_Log::debug('Processing file ' . $this->_sourceFile); $tokenType = $this->tokenizer->peek(); while ($tokenType !== self::T_EOF) { switch ($tokenType) { case self::T_COMMENT: $this->consumeToken(self::T_COMMENT); break; case self::T_DOC_COMMENT: $comment = $this->consumeToken(self::T_DOC_COMMENT)->image; $this->_packageName = $this->_parsePackageAnnotation($comment); $this->_docComment = $comment; break; case self::T_USE: // Parse a use statement. This method has no return value but it // creates a new entry in the symbol map. $this->_parseUseDeclarations(); break; case self::T_NAMESPACE: $this->_parseNamespaceDeclaration(); break; case self::T_NO_PHP: case self::T_OPEN_TAG: case self::T_OPEN_TAG_WITH_ECHO: $this->consumeToken($tokenType); $this->reset(); break; case self::T_CLOSE_TAG: $this->_parseNonePhpCode(); $this->reset(); break; default: if (null === $this->_parseOptionalStatement()) { // Consume whatever token $this->consumeToken($tokenType); } break; } $tokenType = $this->tokenizer->peek(); } $this->_sourceFile->setTokens($this->_tokenStack->pop()); $this->cache->store($this->_sourceFile->getUUID(), $this->_sourceFile, $hash); $this->tearDownEnvironment(); }
/** * Creates a {@link PHP_Depend_Code_ASTNode} instance. * * @param string $className Local name of the ast node class. * @param string $image Optional image for the created ast node. * * @return PHP_Depend_Code_ASTNode * @since 0.9.12 */ private function _buildASTNodeInstance($className, $image = null) { $fileName = "PHP/Depend/Code/{$className}.php"; $className = "PHP_Depend_Code_{$className}"; include_once $fileName; PHP_Depend_Util_Log::debug("Creating: {$className}({$image})"); return new $className($image); }
/** * Parses the contents of the tokenizer and generates a node tree based on * the found tokens. * * @return void */ public function parse() { $this->setUpEnvironment(); // Get currently parsed source file $this->_sourceFile = $this->_tokenizer->getSourceFile(); $this->_sourceFile->setUUID($this->_uuidBuilder->forFile($this->_sourceFile)); // Debug currently parsed source file. PHP_Depend_Util_Log::debug('Processing file ' . $this->_sourceFile); $tokenType = $this->_tokenizer->peek(); while ($tokenType !== self::T_EOF) { switch ($tokenType) { case self::T_COMMENT: $this->_consumeToken(self::T_COMMENT); break; case self::T_DOC_COMMENT: $comment = $this->_consumeToken(self::T_DOC_COMMENT)->image; $this->_packageName = $this->_parsePackageAnnotation($comment); $this->_docComment = $comment; break; case self::T_INTERFACE: $package = $this->_builder->buildPackage($this->_getNamespaceOrPackageName()); $package->addType($this->_parseInterfaceDeclaration()); break; case self::T_CLASS: case self::T_FINAL: case self::T_ABSTRACT: $package = $this->_builder->buildPackage($this->_getNamespaceOrPackageName()); $package->addType($this->_parseClassDeclaration()); break; case self::T_FUNCTION: $this->_parseFunctionOrClosureDeclaration(); break; case self::T_USE: // Parse a use statement. This method has no return value but it // creates a new entry in the symbol map. $this->_parseUseDeclarations(); break; case self::T_NAMESPACE: $this->_parseNamespaceDeclaration(); break; default: // Consume whatever token $this->_consumeToken($tokenType); $this->reset(); break; } $tokenType = $this->_tokenizer->peek(); } $this->tearDownEnvironment(); }