我5.1日正式离职,5.1-5.5做基于SpringBoot的web应用,后来感觉Web程序还是low,没多大意思,于是把去年八九月就想做的编译又捡起来了。
由于龙书虎书鲸书的存在,加上自己不是科班出生,编译原理在我心中有如一座高耸入云的高山,实话说以前被三本书虐过,再捡起来有些打怵。
好在现在互联网购书快捷方便,于是我把市面上能买到的编译书籍都请回家了,遇到不会就研读,终于日本人前桥和弥写的《自制编程语言》中解析算术表达式一节让我开了窍,于是之后便势如破竹:
2020.5.22 解析算术表达式
2020.5.25 解析Json
2020.5.26 解析XML
2020.5.27 解析SQL
2020.6.1 读取Basic打印九九乘法表的脚本
以前看王垠博客,听他说编译并不比其它计算机编程技术高深,当时感觉他有点得了便宜卖乖的样子,现在看来,编译确实也不复杂,读取并执行脚本聊聊数百行代码就可做到,有些书名冠以“两周自制编程语言”也不是夸张,以本人进度来看三周差不多。Web程序和编译程序的最主要差别在于一个处理的是线性数据,一个处理的是递归数据.编译原理之前貌似恐怖是因为龙书虎书鲸书上来先用概念把人砸晕了,其实真动手就可以明白,所谓自动机不过是读取辨认token的程序,它只不过比字符串遍历稍复杂;所谓EBNF不过是函数/对象相互调用的一种表现形式;所谓语法树不过是把代码解读成了对象的形式;所谓执行,转译不过调用语法树节点的统一接口而已。编译真的不复杂,人是怎么理解程序的,编译程序就是怎样写的。多写几种解析解释程序,自然就会了。计算机的实践性就是这么强。用《自制编程语言》作者郑刚的话说,编译原理的诸多概念不了解也不要紧,这不妨碍你写出真正的编译器/解释器来。
可能有些前辈早于我悟到了编译的真谛,当他们兴冲冲地把作品给同人鉴赏或是放到网上时,得到的却是参杂着羡慕嫉妒不服打击等复杂情感的一句,“这只是玩具而已”。
是啊,可不是玩具嘛!无论是在学校在教师指导下做的,还是在业余自学的编译器/解释器作品,总归是个个人作品,怎么能拿去和成名公司做的产品去比!市面上已经存在诸多经过千万人打磨锤炼的编译器/解释器,一个人鼓捣出来的类似玩意,很难做到更好,因此也难有用户群支撑起来,只能放在角落里孤芳自赏,然后落灰,最后终归沦落到被遗忘的结局。
我目前也陷入了这种状态,有心为basicInterpreter添置功能,但这样充其量也是一个Qbasic;有心去做Java/C的编译/解释器,又觉得个人干不过一群精英。一时陷入了迷茫状态,因此昨天,今天都没编程,浪费了两天光阴。
希望能早一秒走出这种状态来!
--2020年6月3日--