- 论坛徽章:
- 0
|
php做为一门热门编程语言且简单易学,为了让php变得更亲切,我们也尝试让php编程中文化.
做为一门脚本语言,php经历了语法解析,转换为opcode并由zend引擎执行的过程,那么"汉化"
则主要集中在语法解析环节.
php采用的语法解析是使用re2c,即正则描述转为C语言代码的过程,主要依据php源码文件中的
zend_language_scanner.l(位于zend目录下),在php编译安装过程中生成zend_language_scanner.c(大多情况下已自带此文件).
故,我们仅需要修改zend_language_scanner.l这个语法文件,大概位于第860行的位置,看到如下内容:
- ....
- <ST_IN_SCRIPTING>"exit" {
- return T_EXIT;
- }
- <ST_IN_SCRIPTING>"die" {
- return T_EXIT;
- }
- <ST_IN_SCRIPTING>"function" {
- return T_FUNCTION;
- }
- <ST_IN_SCRIPTING>"const" {
- return T_CONST;
- }
- <ST_IN_SCRIPTING>"return" {
- return T_RETURN;
- }
- .....
复制代码 这边定义了php所有的语法,我们在保留原英文语法的同时加入中文:
- ....
- <ST_IN_SCRIPTING>"function" {
- return T_FUNCTION;
- }
- <ST_IN_SCRIPTING>"函数" {
- return T_FUNCTION;
- }
- ....
- <ST_IN_SCRIPTING>"返回" {
- return T_RETURN;
- }
- .....
- <ST_IN_SCRIPTING>"if" {
- return T_IF;
- }
- <ST_IN_SCRIPTING>"如果" {
- return T_IF;
- }
- <ST_IN_SCRIPTING>"elseif" {
- return T_ELSEIF;
- }
- <ST_IN_SCRIPTING>"否则如果" {
- return T_ELSEIF;
- }
- <ST_IN_SCRIPTING>"endif" {
- return T_ENDIF;
- }
- <ST_IN_SCRIPTING>"结束如果" {
- return T_ENDIF;
- }
- <ST_IN_SCRIPTING>"否则" {
- return T_ELSE;
- }
- <ST_IN_SCRIPTING>"else" {
- return T_ELSE;
- }
- <ST_IN_SCRIPTING>"echo" {
- return T_ECHO;
- }
- <ST_IN_SCRIPTING>"输出" {
- return T_ECHO;
- }
- ....
复制代码 注意定义中的return内容要与原英文语法一致.
修改完成后,删除目标文件zend_language_scanner.c
另外如果没有安装re2c,请到http://re2c.org下载安装,完成后重新编译php,即可.
以下代码示例test.php:
- <?php
- 函数 测试($打印)
- {
- 如果($打印)
- {
- 输出 'php中文版,汉化';
- }
- 否则
- {
- 返回 'php中文版,汉化';
- }
- }
- 输出 测试();
- ?>
复制代码 #php -f test.php
php中文版,汉化
汉化成功,另外使用时注意编码问题.
php总共有100多个语法关键字,可根据各自喜好定义中文语法,仅此抛砖引玉,希望国人也会有更好的中文编程语法. |
|