Uri*_*ren 8 php syntax bison abstract-syntax-tree
我想扩展php语法,以区分可变和不可变的变量.
$a应该被声明为可变的(如在标准的php中)并且#b应该被声明为不可变的.
我读过Hacking PHP语法,
我无法弄清楚我在哪里可以定义声明的变量#也应该被标记为T_VARIABLE?
我能够解决这个问题,需要采取两个步骤:
PHP解析'#'为注释:改变:
<ST_IN_SCRIPTING>"#"|"//" {
Run Code Online (Sandbox Code Playgroud)
到
<ST_IN_SCRIPTING>"//" {
Run Code Online (Sandbox Code Playgroud)
zend_language_scanner.l第 1901 行
#a变量:改变:
simple_variable:
T_VARIABLE { $$ = $1; }
| '$' '{' expr '}' { $$ = $3; }
| '$' simple_variable { $$ = zend_ast_create(ZEND_AST_VAR, $2); }
;
Run Code Online (Sandbox Code Playgroud)
到:
simple_variable:
T_VARIABLE { $$ = $1; }
| '$' '{' expr '}' { $$ = $3; }
| '$' simple_variable { $$ = zend_ast_create(ZEND_AST_VAR, $2); }
| '#' '{' expr '}' { $$ = $3; }
| '#' simple_variable { $$ = zend_ast_create(ZEND_AST_VAR, $2); }
;
Run Code Online (Sandbox Code Playgroud)
在zend_language_parser.y的第 1117 行
现在这段代码可以工作:
#a=1;
echo (#a);//1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
256 次 |
| 最近记录: |