Forum und email

Funções de Tokenizer

Introdução

As funções de tokenizer formam uma interface para o tokenizer do PHP imbutido no Engine Zend. Usando essas funções você pode escrever ferramentas próprias para análise e modificação de código PHP sem ter que lidar com a especificação da linguagem em um nível léxico.

Veja também o apêndice sobre tokens.

Dependências

Nenhuma biblioteca externa é necessária para compilar esta extensão.

Instalação

Começando no PHP 4.3.0, essas funções estão habilitadas a menos que seja dito o contrário. Para versões anteriores, você tem que configurar e compilar o PHP com --enable-tokenizer. Você pode desabilitar suporte à extensão tokenizer com --disable-tokenizer.

A versão para Windows do PHP tem suporte embutido para esta extensão. Você não precisa carregar nenhuma extensão adicional para utilizar essas funções.

Nota: Suporte integrado para tokenizer está disponível a partir do PHP 4.3.0.

Constantes pré-definidas

Quando a extensão for ou compilado no PHP ou carregada dinamicamente em tempo de execução, os tokens listados em Lista de tokens do Parser são definidos como constantes.

Exemplos

Aqui está um exemplo simples de scripts PHP usando o tokenizer que lerá um arquivo PHP, retirará todos os comentários do fonte e imprimirá apenas o código puro.

Example#1 Retira os comentários com o tokenizer

<?php
/*
 * T_ML_COMMENT não existe no PHP 5.
 * As três linhas seguintes definem ela para
 * preservar compatibilidade com versões anteriores.
 *
 * As duas linhas seguintes definem T_DOC_COMMENT que existe apenas no PHP 5,
 * que nós chamaremos como T_ML_COMMENT para o PHP 4.
 */
if (!defined('T_ML_COMMENT')) {
    
define('T_ML_COMMENT'T_COMMENT);
} else {
    
define('T_DOC_COMMENT'T_ML_COMMENT);
}

$source file_get_contents('example.php');
$tokens token_get_all($source);

foreach (
$tokens as $token) {
    if (
is_string($token)) {
        
// token simples de 1 caracter
        
echo $token;
    } else {
        
// array de tokens
        
list($id$text) = $token;

        switch (
$id) {
            case 
T_COMMENT:
            case 
T_ML_COMMENT// Nós definimos essa
            
case T_DOC_COMMENT// e essa
                // não faz nada com os comentários
                
break;

            default:
                
// Qualquer outra coisa, imprime como é
                
echo $text;
                break;
        }
    }
}
?>

Índice

  • token_get_all — Divide um dado fonte em tokens do PHP
  • token_name — Pega o nome simbólico de um dado token do PHP