首先声明,我不是编译原理领域的高手,我充其量也需只比菜鸟强一点点。
写这篇文章的原因并非我想显耀自己-------再次声明:我不是高手,只是因为不知什么时候我在那个论坛发表了一些关于这方面的言论,并留下了自己的qq号码,于是有一大堆好事者过来询问。这本来是我的荣幸,但从网友的问题中我看到的仍然是空话和废话----与编译原理的中心并不相关,因此,我发现我应该站出来,把我做的事情讲清楚,也算是对这些热心的人的一种负责任的回报。
首先还是要说一些非话的:所谓的编译器就是对使用某种规则编出来的程序进行翻译,一般而言,特定的语言都必须有特定的编译器,没有什么可以兼容的说法,大家熟悉C语言的编译器,如TurboC。这些规则就纯粹是人为的啦,也正因此,诞生了我们所熟悉的大量的各种各样的高级语言,如Pascal、C、C++、Algol~~~~因此所谓的编译器也就是一堆程序,他们检查你是否按照规则来了,以及充分了解你的要求,并把结果返回给你。因此,编译器要做的事情其实很简单:首先检查语言规则(包括词法规则和语法规则),然后做语义分析,余下的就由计算机里的硬件去执行运算指令了(当然这种说法并不恰当)。
这里还应该讲一讲词法分析和语法分析以及语义分析的大概情况,由于时间关系,我以后再补齐,请见谅。
我这里主要说的是我所作的事情,这也是我的毕业设计:为一个类似C语言的小语言Tiny-C做翻译。词法规则和语法规则都是我自己定的————要求充分接近C语言。本来是雄心壮志,想把他做的完美,一方面由于实力——只能止步于语法分析,一方面由于时间——使得该分析器未能如愿工作。我使用的是自下而上的LR(1)分析法,因此花了我不少的时间和精力啊;为此我写了上10页的项目集,最终得到75个状态,最要命的是画出分析表——一张75×41的表格。其实难度不大,量多了一些而已。
不好意思,我今天只能说到这里了,我会议后把这个补充完整,如果你有什么我可以帮忙的,请E-mail至lgdpeter@163.com,或QQ:23172461
感谢你的阅读!