Token类型

PHP 7 的 Token 是在代码 zend_language_parser.h 里面定义的,具体如下:

enum yytokentype
{
    END = 0,
    T_INCLUDE = 258,        //对应include关键字
    T_INCLUDE_ONCE = 259,   //对应include_once关键字
    T_EVAL = 260,           //对应eval关键字
    T_REQUIRE = 261,        //对应require关键字
    T_REQUIRE_ONCE = 262,   //对应require_once关键字
    T_LOGICAL_OR = 263,     //对应or关键字
    //代码省略//

这些 Token 对应的表达可以参见 zend_language_scanner.l,比如 T_INCLUDE 对应的内容如下:

<ST_IN_SCRIPTING>"include" {
    RETURN_TOKEN(T_INCLUDE);
}

PHP 7.1.0 共定义了 136 种 Token。在对 PHP 代码进行词法分析时,可根据正则找到对应的 Token

为了更好地理解 Token,下面举个例子:

<?php
$a = 1;
  1. “<? php” 对应的 TokenT_OPEN_TAG

  2. “$a”“=” 之间的空格对应的 TokenT_WHITESPACE

  3. 文件末尾对应的是 END

PHP 7 中所有的 Token 的对应关系见附录B。