找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2855|回复: 1

浅谈编译原理

[复制链接]
发表于 2015-1-7 22:44:59 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
本帖最后由 cyycoish 于 2015-1-10 04:08 编辑

为了继续开发我的数学软件,我觉得不自己写内核是不行了。于是我开始了寻求表达式处理的漫漫长路。
计算机是怎么计算表达式的?其实这个问题由我编程开始,一直留到了现在。now its time for decoding。
想必大家都用过casio,他的计算表达式的功能简直是赞爆了。how to achieve?
这里我要引出两个概念:中缀表达式和后缀表达式(也叫逆波兰式)。
what are they?形如我们通常写的式子1+2这就是中缀表达式,运算符在两运算数之间。
什么又是逆波兰式为什么要用逆波兰式?形如1 2 +这样把运算符放在操作数之后的表达式就是逆波兰式。
计算机是不能和人一样理解表达式的,计算机识别不了括号,优先级,而后缀表达式恰巧没有括号优先级。一切运算顺序就是从左到右。
怎么中缀转后缀呢。这里就需要一个栈结构。栈好比手枪弹夹,最先压进去的子弹总是最后被打出。利用这一特性,中转后也就easy了。
但是要处理复杂的表达式,光有栈是不行的。那么用到树结构。运算符看作是数的一个节点,操作数就是两片树叶。

好了废话一大堆,没说到正题。什么是编译原理。编译原理就是研究翻译的。他可以把高级语言翻译成更容易调试的低级甚至机器语言。
将源程序读入,翻译成等价的用另一种语言写出的程序就叫编译器。研究编译器的学科叫编译原理。
翻译的过程就是运用各种数据结构,想尽一切办法分析转换高级语言代码。这期间需要语法分析,词法分析,优化,等等等等一系列复杂的步骤,复杂到一些代码要由机器生成(人写太累了)。
yacc便是一个这样的机器,yet another compiler compiler翻译过来是编编译器的编译器。
要知道写第一款fortran编译器花了18年的时间,当然那时没有yacc,全是苦逼的程序员们一个字一个字敲出来的代码。
在这艰苦的18年间,由于写编译器积累了不少经验,总和而成编译原理这门学科。
还好我们是站在老一辈人的肩膀上远眺的,想想我们要用18年创造一门学科该多难!编译器是个大工程大系统,不是少数人能完成的。相比而言解释器就要容易许多,当然,给数学软件做的是解释器内核。
也大概因为难,编译器也就是金字塔的塔尖,而登上塔尖的人都是最聪明,最勇敢的。
那些计算机科学大家,也都是因为编译器出的名。安德斯海尔斯伯格(前宝蓝程序员,现就职于微软)编译器高手,宝蓝正是因为他的pascal编译器大名鼎鼎的turbopascal出的名。比尔盖茨的第一个作品,也是apple机上的basic编译器。丹尼斯里奇,不用我说吧,c语言之父,也是写编译器的。
其次,编译器涉及到的计算机科学也是最多的,什么数据结构啦,软件工程啦,甚至人工智能啦,这些统统在编译原理都有涉及。
好了,给大家推荐一本权威教材吧,那就是龙书:《Compilers: Principles, Techniques and Tools》。希望大家对编译原理这门本该有趣,却有枯燥的学问感兴趣,谢谢大家!。
回复

使用道具 举报

发表于 2015-1-7 22:56:35 来自手机 | 显示全部楼层
如果是我就会分好自然段,每个段表达一个方面的内容,这样更具有可读性。。
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-22 16:15 , Processed in 0.030584 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表