当前位置: > 国内资讯 >

怎样去写一个编译器(用C语言写C语言编译器),需要哪些知识做铺垫,可以给一下相关网站和书籍的推荐吗?

文章发布时间:2015/7/2 3:30:31 来源:



在Word文档中格式刷的妙用上海大学的电力电子与电力传动怎么样??体艺术表演者车静雅大学为何迷惘?天津“微信餐厅”等新型业态悄然兴起

社评:卢布危机无了期 普京骑虎难下手相算命之感情线如何才算戒撸成功?教育类总类核心期刊目录表镂空图案КОПИЛКУ推荐4款秋季养生菜谱汤太咸的解救方法(59)辽宁广播台女台长姜丽彬的腐变宁海汽车站到栎社巴士时间表?powerpoint制作教程:[19]设置页眉页脚涓浗鍥涘ぇ瀹楁暀鍩虹鐭ヨ瘑绠€浠? 鍏充簬word鐨勫嚑涓繀澶囧皬鎶€宸э紝浣犻兘鐭ラ亾鍚楋紵 112姝茶€佷腑閱殑鑷ㄧ祩瀹濊吹楗嬭磮澶噸瑕佷簡锛?长久咳嗽多按合谷穴可止咳食療治癒多年糖尿病【视频】左大培评反日游行中的毛泽东热与韩德强打汉奸事件我只想和你在一起(心情诗文)猎头不来找你的5种原因如何提升销售技巧之人际关系卡扎菲“最后视频”震惊世界你尿液的颜色是否正常-图解说明,准确了解自己的身体健康状况猫哆哩换新包装的销量不如老包装的销量,这能不能说明是失败的营销策略呢?枕边美容:一个懒女孩变漂亮的方法古韵美文100篇(1罪人:性与恶实录(全文)二豆山药粥可用性测试和可用性评估是一回事儿吗?如果不是的话,有什么区别?【美食大集合】煲汤食谱大全文交所是怎样的机构?我们的和西方的文交所有什么渊源和区别。?[鞋子袜子][钩针]Crochetdeschaussonspourbebe宝宝凉鞋(有外文图解)常带笑容乐观积极女人8个特性最吸引异性【美味海鲜】美丽美味小龙虾发动机电控系统通常用什么芯片作为处理器?柳传志碰到福特聊什么如果我离开你鍔ㄦ€佸嚑浣曡В棰樺垎鏋愮ず渚嬩笌鎬濊€冪瓥鐣?绿风衣小美女《古典著名抒情诗句》赏析宫延八珍爆烤鸭的制作方法[转载]越南购俄第5艘基洛级潜艇下水首批两艘已入列

《周易注》下经夬传卷五为什么和男票在一起总想着抱抱亲亲摸摸?这正常么?不是一般是男生才更想着这些么?「明台端坐消弥尔,一眼望尽万重山」,如何解读这句诗?[转载]越南购俄第5艘基洛级潜艇下水首批两艘已入列

相关问题:


參考王垠『怎样写一个解释器

网友回答:


怎样去写一个编译器(用C语言写C语言编译器),需要哪些知识做铺垫,可以给一下相关网站和书籍的推荐吗?Amazon.com: A Retargetable C Compiler: Design and Implementation (9780805316704): David R. Hanson, Christopher W. Fraser: Books


答友:题主专门指定问“用C写C编译器”,那有本书专门就是讲这个的:A Retargetable C Compiler。有中文版不过翻译得不太好,勉强可读。这本书以 lcc 为实例,从源码实现的每个细节介绍了一个C语言编译器如何用C语言来实现。

这本书的“缺点”是它就注重每个组件的具体实现,而只是简单介绍了每个组件背后的原理,也没有多展开介绍除了那种实现方式之外还有啥选择。用这本书来搭配别的专门介绍原理的书来阅读,例如龙书或虎书,效果会不错。

嗯再次提醒如果读中文版的话它的翻译实在是比较费读者的脑细胞…我忍了好久终于决定买了原版 ToT


答友:|||谢谢邀请。

要学编译器设计和实现,《编译原理》是很多大学课程的入门必选。这本书素质一流,不过老实说,放到现在看已经有些老了,很多新的技术都没有足够的阐述,且偏重相对重量级的方法,比如LALR(1)文法。可惜我已经不看编译原理多年,也不知那本书更合适一些。

我不赞同入门者从GCC或LLVM的源代码开始。这几个都是工业级别的产品,代码庞大,尤其是GCC的中间层设计相当复杂且混乱,阅读效果并不好(我自己大学时的印象,GCC 3.3.3,现在不知道好些了没有)。如果把讨论范围限定在C语言编写的C编译器,那么我强烈推荐bellard.org/tcc/。公开源代码,且兼容GCC语法,代码量也很少,适合入门。

如果从Java开始,那么另一个可以选择的辅助工具则是ANTLR。它不是编译器,而是语法分析工具。可以帮助我们了解基本的LL(n)语法分析逻辑。


答友:编译原理
gcc或者llvm的源代码(llvm也许更合适一些)


答友:一、先把畏惧之心去掉,再谈学习

想当年的编译原理。。。。实在是让人终身难忘的一门课:
教材到手,翻翻,尼玛基本什么都不明白。
开学三周,每周8节课,这么大的课时,楞是没怎么听懂。(班上几个妖人除外)
图书馆借几本书,比编译原理还难懂。
相比之下,数据结构是多么亲切,神马线索树 B树简直弱爆了。
等看了LEX YACC,总算有点底了。

二、花N倍时间下去
教材还是不错的,学完后回看,基本靠谱。还是动脑筋和动手太少。
大学里,还有一门单片机也是下了狠心学的,自己买了单片机业余时间把课后实验全部做光。
尼玛工作之后就没做过单片机,51系列这么好的基础。。。

三、编点实在的。
不推荐GCC LLVM。。。 程序短小为好。


答友:哦哦,实习期刚用java写了一个类似javacc的编译器(只包括词法分析语法分析,不含代码生成等),之前没学过java,也没学过编译原理。
由于觉得龙书晦涩难懂,一下子看完再编怕是精力全失,所以就一步步来,先看了词法分析部分,然后动手写了,有java的pattern包,所以不是很难(没经历DFA,NFA这种),最难的估计也就怎么实现最长匹配。那个部分完成后,实现有一个token文件规定token,一个输入文件,输出token列表。
之后继续看龙书的语法分析部分,使用了最基础的LL(1)来做语法分析。按照书上的先first集合,再follow集合,建表。然后跟词法分析部分进行连接。成功后,扩展成了LL(k)。
基本部分完成后,就开始加强功能了,一开始的grammar只支持BNF写语法,后来扩展成可以用EBNF写。
看过一个博客,是自己动手开发编译器(零)序言 ,虽然真的coding的时候没有怎么参考,但是对于理论部分的理解还是有好处的。
然后,是看了一个EBNF转BNF的算法,对我们项目本身比较有用吧。EBNF CONVERT TO BNF


答友:个人觉得该学学lex和yacc


答友:如果只是学习目的:建议学习编译原理,用yacc一类的工具做到词法和语法分析,更深入的可以找开源的编译器源码和设计学习。

如果是工程或者商业需求:注意编译器现在已经是一个很综合的工具链,不是简单C语法分析这些语言层面的东西。没有预编译C也没办法使用,另外还有比如目标代码生成,移植性,跨平台,调试器,优化等等。业界已经有很好开源的编译器,如果不能发明更好的轮子,就不要重复发明轮子。


答友:如果只是想写出来其实没什么难的,但想写好想写出优秀的堪比登天。
如果熟悉python 可以使用ply
如果熟悉C的话 学一下lex&yacc
只要熟悉文法规则 会正则表达式就行,然后看几个语言的lex和yacc的例子,就可以开动了。
至于里面的理论知识,慢慢补就行,每做一步都问问为什么要这样做,编译原理比较难读,《编译器设计》是本不错的入门书,另外如果单独进修文法,推荐:《编译程序设计艺术:理论与实践》 这本书对文法的描述,简直登峰造极了。不过还有本spring出的关于文法分析的书也不错,名忘了。


答友:龙书第一版


答友:楼上很多人都在讲前端,但我觉得编译器的后端才是更值得研究的东西。事实上编译是个很大的话题,如果需要写一个完整的编译器,你需要从基本编程技能到计算机体系结构在内的多方面知识。建议开始的时候选一个简单点的C语言子集和一个简单点的目标体系结构。说什么让看GCC和LLVM的都是扯淡。我不是说新手不能看这些东西,我只是觉得能看这些东西的新手应该不会来知乎问这样的问题。


答友:编译器后端的实现还是很复杂的。建议你使用llvm作为后端,前面的词法语法分析可以自己手写。


答友:有本书叫做 编译器原理 又叫编译原理(感觉第二个名字不准确)。看完就可以写编译器啦~或者学一下这门课,计算机类专业的必修课


答友:个人推荐Amazon.com: Compiler Design in C (Prentice-Hall software series) (9780131550452): Allen I. Holub: Books, 感觉曲线更平缓


答友:龙书,虎书,鲸书,随便选一本吧


梁育诗:金价下探楔形底部美国经济数据好坏参半,虽然耐用品订单、Markit制造业PMI不及预期;但5月新屋销售折合年率为54

梁育诗:金价下探楔形底部美国经济数据好坏参半,虽然耐用品订单、Markit制造业PMI不及预期;但5月新屋销售折合年率为54



广告专栏

不存在相应的目录