关于中文编程的一些思考( 四 )


1.编译安装re2c
re2c官网以及github仓库
安装过程自行百度、Google , 我这里使用的是 re2c 1.3 。
2.下载并解压缩PHP官方源码
这里使用的版本是 7.4.10
3.添加自定义词法规则 编辑php-7.4.10/Zend/zend_language_scanner.l文件 , 添加下面代码 。
"如果" {RETURN_TOKEN(T_IF);}"否则" {RETURN_TOKEN(T_ELSE);}"输出" {RETURN_TOKEN(T_ECHO);}4.使用re2c重新生成最新的词法分析器代码
/usr/local/re2c/bin/re2c --no-generation-date --case-inverted -cbdF -o zend_language_scanner.c zend_language_scanner.l5.编译安装PHP程序 回到PHP源码根目录 , 编译安装PHP 。 这里笔者只是为了简单的测试使用 , 没有添加、开启其他选项 。
./configure --prefix=/usr/local/php7.4makemake install到这里 , 恭喜你不仅已经拥有了一个跟笔者一样的 , 可以执行中文编写的1.2示例代码的PHP程序 。 而且 , 还可以基于PHP , 来自定义一个属于自己的中文编程规范 。
5. 中文编程语言的思考从编程语言的分类角度来看 , 想要开发一种新的中文编程语言 。 一般需要考虑下面几件事情:
1.语言是编译型还是解释型2.如何定义语言词法规则3.如何定义语言语法规则4.什么样的中间码5.中间码生成机器码还是运行在虚拟机上
5.1 设计中文编程语言的思路一般有两种选择:
I. 想要减小底层设计的复杂度 , 重点关注上层语言层面特性 。 一般是使用其他语言来构建当前语言 , 使用虚拟机来执行特定格式的中间码 。 例如:PHP使用C语言来编写底层内核逻辑 , PHP源码生成的中间码opencode , 运行在zend虚拟机之上 。
II. 不依赖于其他语言 , 从底层到上层全部重新设计 。 最关键的是 , 要有一个支持该语言的编译器 , 能够直接将该语言编译成某种中间码或者机器码 。 例如:Golang语言(go语言前期几个版本使用C语言编写底层逻辑 。 后面实现了自举 , 底层除了少数文件使用汇编 , 其他全部使用go语言编写) 。
貌似还有第三种选择:那就是跟笔者上面的例子一样 , 使用某种编程语言 , 仅仅是修改一下其词法规则 , 让其支持中文编程 。 (这种方法相当于穿了个新的马甲 , 不能称之为新的编程语言 , 称之为汉化更合适 。 当然 , 很多时候也是让人嗤之以鼻的 。 不禁让笔者想起来了若干年前 , 关于国产CPU的一件事情:买一颗其他厂商的CPU , 打磨掉旧的logo , 换个新的logo 。 总之 , 前路漫漫 , 道阻且长 。 还是希望国内高手们能齐心协力 , 发明一款国人亲手打造的、被广泛使用的编程语言) 。
从目前的情况来看 , 大部分的中文编程语言采用的是第一种实现方法 。 但是 , 也不排除部分采用第二种方法 , 当然该方法对开发人员来说也是难度最大的一种 。
这里想要着重说明一点:中文编程不是简单的编程关键字替换为中文 , 而是中文编程时所使用关键字的底层API调用、类库支持、系统交互等一系列的设计 。
5.2 中文编程的意义及未来正所谓 , 仁者见仁智者见智 。 至于中文编程的意义以及未来 , 笔者也搜索了一些文章 , 或支持、或反对 , 每个人有自己的独特见解 。 感兴趣的话读者可以搜索相关资料 。
如果 , 你问我:你相信中文编程会有未来吗?
那么 , 我可能会说:我永远相信美好的事情 , 一定会发生 。
这里抛出一个笔者个人的观点(不引战 , 杠精绕道):中文编程对国人来说也是另一种选择 , 排除那些专业的开发人员 。 起码 , 对那些不懂编程的爱好者或者低龄儿童来说 , 只要稍微熟悉一些逻辑 , 也能编写出一些优秀的软件 。 又何乐而不为呢?
当然 , 想要搞出一款纯粹的中文编程语言也会是有一定难度 。 从计算机体系结构来看 , 排除高层次的编程语言层面来看 , 底层的操作系统、指令集也牵扯巨量工程 。 如果 , 非要集国人之力搞出这么一套也不是不可能 , 只是从成本角度来看 , 投入跟产出比不会太大 。 当前 , 世界正在成为一个地球村 。 各种文化的融合交汇 , 也促使着时代滚滚向前的进程 , 很多新事物往往也是顺应着时代潮流 , 在各个行业众多的顶尖人才参与下才得以出现 。 我们也应该顺应时代潮流 , 参与进去 , 增加影响力、参与标准化的制定 , 这才是一个明智的选择 。 同时 , 也应该掌控一些核心科技才是王道 。