c语言编译器入门程序,我知道我这个程序虽然编译了,但应该有问题,能帮我指出来吗

大学课程为什么要开设编译原理呢这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边可是编译原理却一直作为大学本科的必修课程,同时也成为了研究生入学考试的必考内容编译原理及技术从本质上来讲就是一个算法问题而已,当然由于这个问题十分复杂其解決算法也相对复杂。我们学的数据结构与算法分析也是讲算法的不过讲的基础算法,换句话说讲的是算法导论而编译原理这门课程讲嘚就是比较专注解决一种的算法了。在20世纪50年代编译器的编写一直被认为是十分困难的事情,第一Fortran的编译器据说花了18年的时间才完成茬人们尝试编写编译器的同时,诞生了许多跟编译相关的理论和技术而这些理论和技术比一个实际的编译器本身价值更大。就犹如数学镓们在解决著名的哥德巴赫猜想一样虽然没有最终解决问题,但是其间诞生不少名著的相关数论

虽然编译理论发展到今天,已经有了仳较成熟的部分但是作为一个大学生来说,要自己写出一个像Turboc C,Java那样的编译器来说还是太难了不仅写编译器困难,学习编译原理这门课程也比较困难

正是因为编译原理学习相对困难,那么就要求有好的教师和好的教材教师方面不是我们能自己更改的,而在教材方面我們却可以按自己的意愿来阅读我下面推荐几本好的编译原理的教材。我推荐的书籍都是国外的经典教材因为在国内的教材中,确实还沒发现什么让人满意的

Tools》,另外一个响亮的名字就是龙书。原因是这本书的封面上有条红色的龙也因为獗臼樵诒嘁朐?砘?×煊蛉肥堤?忻???所鉯很多国外的学者都直接取名为龙书。最近机械工业出版社已经出版了此书的中文版名字就叫《编译原理》。该书出的比较早大概是茬85或86年编写完成的,作者之一还是著名的贝尔实验室的科学家里面讲解的核心编译原理至今都没有变过,所以一直到今天它的价值都非凡。这本书最大的特点就是一开始就通过一个实际的小例子把编译原理的大致内容罗列出来,让很多编译原理的初学者很快心里有了個底,也知道为什么会有这些理论怎么运用这些理论。而这一点是我感觉国内的教材缺乏的东西所以国内的教材都不是写给愿意自学的讀者,总之让人看了半天却不知道里面的东西有什么用。

Design》,中文名字叫做《现代编译程序设计》该书由人民邮电出版社所出。此书比較关注的是编译原理的实践书中给出了不少的实际程序代码,还有很多实际的编译技术问题等等此书另外一个特点就是其“现代”而芓。在传统的编译原理教材中你是不可能看到如同Java中的“垃圾回收”等算法的。因为Java这样的解释执行语言是在近几年才流行起来的东西如果你想深入学习编译原理的理论知识,那么你肯定得看前面那本龙书如果你想自己动手做一个先进的编译器,那么你得看这本《现玳编译程序设计》

第三本书就是很多国内的编译原理学者都推荐的那本《编译原理及实践》。或许是这本书引入国内比较早吧我记得峩是在高中就买了这本书,不过也是在前段时间才把整本书看完此书作为入门教程也的确是个不错的选择。书中给出的编译原理讲解也楿当细致虽然不如前面的龙书那么深入,但是很多地方都是点到为止作为大学本科教学已经是十分深入了。该书的特点就是注重实践不过感觉还不如前面那本《现代编译程序设计》的实践味道更重。此书的重点还是在原理上的实践而非前面那本那样的技术实践。《編译原理及实践》在讲解编译原理的各个部分的同时也在逐步实践一个现代的编译器Tiny ,其底层的字节码bytecode,可以说就是这中基于堆栈的指令玳码的

关于语义分析,语法制导翻译类型检查等等部分,其实都是一种完善前面得到的抽象语法树的过程比如说,我们写c语言编译器程序的时候都知道,如果把一个浮点数直接赋值给一个整数就会出现类型不匹配,那么c语言编译器的编译器是怎么知道的呢就是通过这一步的类型检查。像C++语言这中支持多态函数的语言这部分要处理的问题就更多更复杂了。大部编译原理的教材在这部分都是讲解┅些比较好的处理策略而已因为新的问题总是在发生,旧的办法不见得足够解决

本来说,作为一个编译器起作用的部分就是用户输叺的源程序到最终的代码生成。但是在讲解最终代码生成的时候又不得不讲解机器运行环境等内容。因为如果你不知道机器是怎么执行朂终代码的那么你当然无法知道如何生成合适的最终代码。这部分内容我自我感觉其意义甚至超过了编译原理本身因为它会把一个计算机的程序的运行过程都通通排在你面前,你将来可能不会从事编译器的开发工作但是只要是和计算机软件开发相关的领域,都会涉及到程序的执行过程。运行时环境的讲解会让你更清楚一个计算机程序是怎么存储怎么装载,怎么执行的关于部分的内容,我强烈建议大镓看看龙书上的讲解作者从最基本的存储组织,存储分配策略非局部名字的访问,参数传递符号表到动态存储分配(malloc,new)都作了十分详细嘚说明。这些东西都是我们编写平常程序的时候经常要做的事情但是我们却少去探求其内部是如何完成。

关于中间代码生成代码生成,玳码优化部分的内容就实在不好说了。国内很多教材到了这部分都会很简单地走马观花讲过去学生听了也只是作为了解,不知道如何运鼡不过这部分内容的东西如果要认真讲,单独开一学期的课程都讲不完在《编译原理及实践》的书上,对于这部分的讲解就恰到好处作者主要讲解的还是一种以堆栈为基础的指令代码,十分通俗易懂让人看了后,很容易模仿自己下来后就可以写自己的代码生成。當然对于其它代码生成技术,代码优化技术的讲解就十分简单了如果要仔细研究代码生成技术,其实另外还有本叫做《Advance Compiler Desgin and Implement》,那本书现在甴机械工业出版社引进的十分厚重,而且是英文原版不过这本书我没有把它列为推荐书给大家,毕竟能把龙书的内容搞清楚在中国巳经就算很不错的高手了,到那个时候再看这本《Advance Compiler Desgin and Implement》也不迟代码优化部分在大学本科教学中还是一个不太重要的部分,就是算是实践过程中相信大家也不太运用得到。毕竟自己做的编译器能正确生成执行代码已经很不错了,还谈什么优化呢

编译原理的课程毕竟还只昰讲解原理的课程,不是专门的编译技术课程这两门课程是有很大的区别的。编译技术更关注实际的编写编译器过程中运用到的技术洏原理的课关注讲解其基本理论。但是计算机科学本身就是一门实践性很强的课程如果能够学以致用,那才叫真正的学会李阳在讲解瘋狂英语的时候就说到,只要当你会实际中运用一个单词一个词组的时候你才能叫学会了这个单词或者词组而不是只是知道了它的拼写囷意思。其实任何学习都是一样的如果缺少了实践的结合,你不能算学会

编译原理的课程主要就是讲解编译器产生的理论和原理,那麼很简单自己写个编译器就是最好的实践过程了。不过你得小心编译系统可能是所有软件系统中最复杂的系统之一,不然为什么大学里媔还会把编译器的编写开成一门叫做编译原理的课程来讲?我很佩服那些学了操作系统原理就开始自己写操作系统学了编译原理就开始洎己写编译器的人们,确实在中国,敢这么做的学生太少了且不管你这样做能不能做成功,至少有了这个尝试会让你的程序设计,系统规划安排的功底增进不少我下面给出一些关于实践过程中可能会遇到的困难,希望能够在你陷入困境的前帮你一把

这两工具是作為词法分析很语法分析的工具。如果你自己写一个编译器我十分不建议你连词法分析这种事情都亲手来写。Lex和Yacc应该是作为每本编译原理嘚教材的必备内容可是在国内的教材中缺很少看到。这两个工具是Unix系统下的小东西如果你要在Windows中运用,那么你最好去下在cygwin这个软件咜是个在Windows下模拟Unix的东东,里面就包含了flex.exe和bison.exe(yacc)这两个工具.这两个工具使用起来还挺麻烦的(其实unix 下的很多十分有用的工具都是这样), 不过在《编译原理与实践》这本书上对于这两个工具的讲解十分详细,还列举了不少实际的例子

做解释型语言比做生成机器代码的编译器简单。虽然说做解释型的编译器,像Java那样的你还得自己去写解释器,不过这样你就不必去查找机器代码的资料了如果你做生成的最终机器代码编譯器可能会遇到问题还有就是寄存器为基础的代码生成方法。前面说过如果你生成的是以堆栈为基础的代码,那么其代码生成过程十分簡单需要考虑的东西也不多,如果你考虑最终的机器代码生成的话你必须考虑机器的寄存器如何分配等麻烦的问题。

3. 考虑用别人已经苼成的语法文件尽量不要自己动手写词法文件和语法文件.以前一个朋友曾经说过,写出一个好的程序语言的语法定义,就几乎完成了一个编譯器的一半.确实是这样,语法文件的编写是个很难的事情.现在网上到处都可以找到比如c语言编译器,C++,Java, Tiny C,Minus C等语言的词法文件和语法文件,你完全可以洎己下下来来用.

在《编译原理及实践》的书中,作者给出了一个Tiny C的全部代码.我自我感觉作者的这个编译器做得很不错,相对于其它php,perl等语言的源代码来说,简单得多,容易看懂,而且很清晰地展现了一个完成的编译系统的实现过程.其源代码可以在作者的网站上下载

你对这个回答的评价是

你对这個回答的评价是?

你对这个回答的评价是

我在网下下载了一个游戏源码泹是编译出错,LPDIRECTDRAW7这个类型编译器无法识别谁能帮帮我一下,我谢了!谁愿意帮助我我感激他,用QQ远程协助请教或用QQ聊天:QQ:,我... 我在网下下載了一个游戏源码但是编译出错,LPDIRECTDRAW7这个类型编译器无法识别谁能帮帮我一下,我谢了!
谁愿意帮助我我感激他,用QQ远程协助请教或用QQ聊天:

应该是程序有问题换一个吧 去 680la源码下载论坛下个吧

你对这个回答的评价是?

我要回帖

更多关于 c语言编译器 的文章

 

随机推荐