博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
写语法分析器的感想
阅读量:4294 次
发布时间:2019-05-27

本文共 706 字,大约阅读时间需要 2 分钟。

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

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

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

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

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

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

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

转载地址:http://utuws.baihongyu.com/

你可能感兴趣的文章
OpenGL ES 3.0(四)图元、VBO、VAO
查看>>
OpenGL ES 3.0(五)纹理
查看>>
OpenGL ES 3.0(八)实现带水印的相机预览功能
查看>>
OpenGL ES 3.0(九)实现美颜相机功能
查看>>
FFmpeg 的介绍与使用
查看>>
Android 虚拟机简单介绍——ART、Dalvik、启动流程分析
查看>>
原理性地理解 Java 泛型中的 extends、super 及 Kotlin 的协变、逆变
查看>>
FFmpeg 是如何实现多态的?
查看>>
FFmpeg 源码分析 - avcodec_send_packet 和 avcodec_receive_frame
查看>>
FFmpeg 新旧版本编码 API 的区别
查看>>
RecyclerView 源码深入解析——绘制流程、缓存机制、动画等
查看>>
Android 面试题整理总结(一)Java 基础
查看>>
Android 面试题整理总结(二)Java 集合
查看>>
学习笔记_vnpy实战培训day02
查看>>
学习笔记_vnpy实战培训day03
查看>>
VNPY- VnTrader基本使用
查看>>
VNPY - CTA策略模块策略开发
查看>>
VNPY - 事件引擎
查看>>
MongoDB基本语法和操作入门
查看>>
学习笔记_vnpy实战培训day04_作业
查看>>