写语法分析器的感想

由于课程设计的需要,我要实现一个源代码到四元式的翻译程序,整个过程对我来说还是很有挑战性的。

容易的部分就不说了,本来我就是用递归下降实现的,已经十分的直观了(相对于SLR等自底向上的分析法),但是我在实现的过程中还是遇到了一些问题,最棘手的是

<expression>:=<term>{(+|-)<term>}

这样的语句的分析,因为只有<term>是符合文法的情况下才能继续下去,然后我实现的时候就写了一个int类型的term函数,每次判断term是否返回正确的结果才继续下一步分析,

我只能说It Works,但是让却给我一种累觉不爱的感觉,后来作业交上去了,但是仍然想学习一下编译的过程,于是继续看书,恩,就是经典的龙书,我发现书上有个十分好的方法,它使用一个match函数来判断下一个单词是否是所需要的,不是的话,直接退出程序,我一瞬间就感觉豁然开朗,立马把我自己的代码改写了一下,这样不仅实现起来轻松多了,而且可读性也提高了不少,想起之前的做法,完全是刻板地遵守结构化编程的原则,结果却丢失了结构化的优点。而像match这种类似于goto end的函数,虽然不符合结构化的原则,但是却能大大提高工作效率和可读性,这也让我明白了为什么很多人吐槽C语言的goto,但是ISO仍然保留它,而Linux内核开发也大量使用的原因了。

后来我翻了一下教材,发现它的实现方法其实和龙书是类似的,但是上面的代码排版恶心,函数变量不分,当时就让我没兴趣看下去,这样拙劣的教材竟然能在高校使用,真的让我对高校的教材选用很失望。

每天埋头写代码,不如抽些时间看看大师们的杰作,思考思考,站在巨人的肩膀上,我们才能看得更远。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值