源码中的其他使用
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; }
;