源码中的其他使用

Re2c 在源码的很多位置都有使用,比如在 phpdbg 中对 phpdbg_lexer.l 的分析,代码如下:

/*! re2c
re2c:yyfill:check = 0;
T_TRUE      'true'
T_YES       'yes'
T_ON        'on'

另外,json 中的 json_scanner.re、pdo 中的 pdo_sql_parser.re、phar 中的 phar_path_check.re、ext/standard/var_unserializer.re、ext/standard/url_scanner_ex.re 也是通过 Re2c 转换为 C 语言文件。

Bison 在 PHP 7 源码的很多其他位置也有使用,比如配置文件解析的 zend_ini_parser.y,代码如下:

expr:
        var_string_list                  { $$ = $1; }
    |   expr '|' expr                    { zend_ini_do_op('|', &$$, &$1, &$3); }
    |   expr '&' expr                    { zend_ini_do_op('&', &$$, &$1, &$3); }
    |   expr '^' expr                    { zend_ini_do_op('^', &$$, &$1, &$3); }
    |   '~' expr                         { zend_ini_do_op('~', &$$, &$2, NULL); }
    |   '! ' expr                         { zend_ini_do_op('! ', &$$, &$2, NULL); }
    |   '(' expr ')'                     { $$ = $2; }
;