在写编译器的过程中,我意识到编译其实是一种符号变换,比如C语言编译成机器码,其实是C源码文件中的符号变换成EXE的16进制符号,这和中文翻译成英语的语言翻译器没什么区别。
每个程序员都有自己喜欢的编程语言和编码风格,所以世界上就出现了大量的编程语言,各种编程语言之间相互通信并不那么简单,C语言是个例外,所以C语言适合做接口。
那么能不能写一个通用的引擎充当各种语言的中间翻译层呢?这就是符号变换引擎(Symbol Transform Engine - STE),下面是它的整体设计:
这东西有什么用?它可以将C++翻译为JS,也可以将JS翻译成lua,又或者将C++翻译成C,等等。如果仅仅有这么点用途那它还只是一个编程语言翻译器,更为神奇的是它可以做二进制翻译,比如将一个后缀为WAV的波形文件音量降低50%,将一篇英语小说翻译成中文小说,或者给一个JPG文件打上水印,等等无数的用途。
一个正则表达式高手可能会告诉你他可以用正则实现波形文件音量降低50%,但这极为困难,并且代码很难看懂,符号变换引擎却不同,它内置模式匹配和一大堆高级语言语法,它的模式匹配不仅仅是正则的字符匹配,还有单词匹配,宏匹配,所以可以很轻松完成这个任务。王垠说Scheme的模式匹配是很强大的功能,但Lisp的模式匹配仅限于S表达式,这就限制了它的应用范围。
STE开源引擎已经立项,第一期计划支持50%的C++语法、90%的JS语法、10%的python语法、80%的汇编,欢迎有兴趣的朋友参与进来。QQ交流群:34269848
时间: 2024-11-09 10:08:16