Chinaunix

标题: 汉化php,实现中文编程 [打印本页]

作者: bs    时间: 2010-10-27 19:55
标题: 汉化php,实现中文编程
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行的位置,看到如下内容:

  1. ....
  2. <ST_IN_SCRIPTING>"exit" {
  3.         return T_EXIT;
  4. }

  5. <ST_IN_SCRIPTING>"die" {
  6.         return T_EXIT;
  7. }

  8. <ST_IN_SCRIPTING>"function" {
  9.         return T_FUNCTION;
  10. }

  11. <ST_IN_SCRIPTING>"const" {
  12.         return T_CONST;
  13. }

  14. <ST_IN_SCRIPTING>"return" {
  15.         return T_RETURN;
  16. }
  17. .....
复制代码
这边定义了php所有的语法,我们在保留原英文语法的同时加入中文:

  1. ....
  2. <ST_IN_SCRIPTING>"function" {
  3.         return T_FUNCTION;
  4. }

  5. <ST_IN_SCRIPTING>"函数" {
  6.         return T_FUNCTION;
  7. }
  8. ....
  9. <ST_IN_SCRIPTING>"返回" {
  10.         return T_RETURN;
  11. }
  12. .....

  13. <ST_IN_SCRIPTING>"if" {
  14.         return T_IF;
  15. }

  16. <ST_IN_SCRIPTING>"如果" {
  17.         return T_IF;
  18. }

  19. <ST_IN_SCRIPTING>"elseif" {
  20.         return T_ELSEIF;
  21. }

  22. <ST_IN_SCRIPTING>"否则如果" {
  23.         return T_ELSEIF;
  24. }

  25. <ST_IN_SCRIPTING>"endif" {
  26.         return T_ENDIF;
  27. }

  28. <ST_IN_SCRIPTING>"结束如果" {
  29.         return T_ENDIF;
  30. }

  31. <ST_IN_SCRIPTING>"否则" {
  32.         return T_ELSE;
  33. }

  34. <ST_IN_SCRIPTING>"else" {
  35.         return T_ELSE;
  36. }

  37. <ST_IN_SCRIPTING>"echo" {
  38.         return T_ECHO;
  39. }

  40. <ST_IN_SCRIPTING>"输出" {
  41.         return T_ECHO;
  42. }
  43. ....
复制代码
注意定义中的return内容要与原英文语法一致.
修改完成后,删除目标文件zend_language_scanner.c

另外如果没有安装re2c,请到http://re2c.org下载安装,完成后重新编译php,即可.


以下代码示例test.php:

  1. <?php

  2. 函数 测试($打印)
  3. {
  4.         如果($打印)
  5.         {
  6.                 输出 'php中文版,汉化';
  7.         }
  8.         否则
  9.         {
  10.                 返回 'php中文版,汉化';
  11.         }
  12. }

  13. 输出 测试();
  14. ?>
复制代码
#php  -f test.php
php中文版,汉化

汉化成功,另外使用时注意编码问题.

php总共有100多个语法关键字,可根据各自喜好定义中文语法,仅此抛砖引玉,希望国人也会有更好的中文编程语法.
作者: lnn1123    时间: 2010-10-27 20:48
仅仅好玩而已,输入麻烦了
作者: kee212    时间: 2010-10-27 21:42
这个绝对是有价值的,而且很大
往相反的方向走一下
我指的不是让程序更易懂,而是更难懂,就是加密!
作者: lyf088    时间: 2010-10-27 21:42
  ,总觉得那样别扭啊
作者: xiaochong0302    时间: 2010-10-27 22:52
我就见过一个老程序员写过一个apache的解析模块用的是中文编程,他也是好玩!
作者: liexusong    时间: 2010-10-27 23:19
怎么解决编码问题呢?
作者: 一路征程一路笑    时间: 2010-10-27 23:43
提示: 作者被禁止或删除 内容自动屏蔽
作者: starzhestarzhe    时间: 2010-10-28 09:36
这个绝对是有价值的,而且很大
往相反的方向走一下
我指的不是让程序更易懂,而是更难懂,就是加密!
kee212 发表于 2010-10-27 21:42



   
作者: 黑胡子    时间: 2010-10-28 10:33
不错 用来加密比较好噢
作者: hightman    时间: 2010-10-28 10:56
不错 用来加密比较好噢
黑胡子 发表于 2010-10-28 10:33


对加密一点用也没有,反解时本来就是直接处理OPCODE~
作者: renxiao2003    时间: 2010-10-28 19:22
要是真能汉化了就好了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2