社区
C语言
帖子详情
咋样用C语言写一个C语言编译器
秋刀鱼
2008-05-23 09:59:24
咋样用C语言写一个C语言编译器,请各位大侠提供点思路,或应该看那些书,本人根本是就不知道从哪下手,谢谢啦
...全文
2130
32
打赏
收藏
咋样用C语言写一个C语言编译器
咋样用C语言写一个C语言编译器,请各位大侠提供点思路,或应该看那些书,本人根本是就不知道从哪下手,谢谢啦
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
32 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
temp2012temp
2012-01-05
打赏
举报
回复
高难度啊。
灼眼的超哥
2012-01-05
打赏
举报
回复
完全了解编译器的编译原理后,才用C语言写个编译器吧。
C语言编译器gcc有现成的源代码,你可以参考一下,虽然源码很庞大。。。
zhangwanlong
2012-01-04
打赏
举报
回复
编译原理很难,教学书是交lex yacc
lex比较容易,稍微入门点还是可以弄出来
yacc就比较麻烦了,LR文法考试要写一张大考卷
如果lz真要编编译器,lex yacc只是解决了词法和文法的分析部分
具体生成汇编or机器码,对一些数据结构的处理,预编译指令,函数调用等都是实际需要解决的问题
都弄好了,就能编出一个没有优化,效率很低的编译器
mLee79
2012-01-04
打赏
举报
回复
也没有传说的那么难, 你先定一个小一点的目标, 比如只实现 C 的一个子集, 比如数据类型只有 int , char 及其指针类型, 程序控制只有 if while for break continue , 运算只有 ++ -- + - * / << >> ~ ! & | && || 啥的, 库函数只有有限的几个... 然后你只生成汇编代码, 然后借助 gas , ld 等工具生成可执行代码 ...
那么从现在开始看龙书, flex , yacc , 大概在半年以后就可以完工了 ...
viper200942053
2012-01-04
打赏
举报
回复
龙书比较好
赵4老师
2012-01-04
打赏
举报
回复
LEX+YACC
i945800687
2012-01-04
打赏
举报
回复
[Quote=引用 28 楼 mlee79 的回复:]
也没有传说的那么难, 你先定一个小一点的目标, 比如只实现 C 的一个子集, 比如数据类型只有 int , char 及其指针类型, 程序控制只有 if while for break continue , 运算只有 ++ -- + - * / << >> ~ ! & | && || 啥的, 库函数只有有限的几个... 然后你只生成汇编代码, 然后借助 gas , ld 等……
[/Quote]
流汗,学编译原理这么难啊。。。。。。。
jinyt
2008-06-16
打赏
举报
回复
建议,先用C写一个C的统计工具
多少行注释,多少个函数,多少个类(结构)等等等等
chenzhp
2008-06-13
打赏
举报
回复
梁肇新《编程高手箴言》 中有一个用C语言写的BASIC语法分析器。楼主可以参考。
yyyapple
2008-06-13
打赏
举报
回复
VC = Very Cai
yyyapple
2008-06-13
打赏
举报
回复
VB = Very B
happy0707
2008-06-13
打赏
举报
回复
[color=#0000FF][/color
luomoweilan
2008-06-13
打赏
举报
回复
编译原理是一门很难的课程,学习时要有毅力,词法分析,语法分析,语义分析,楼主可以编写一个简单的c语言的编译器,能够实现简单的功能,一定要结合着源码来学习,这样就容易的多了,否则光看理论就根本不知道在说些什么。
茻鄷
2008-05-27
打赏
举报
回复
学习
nethou
2008-05-27
打赏
举报
回复
可以参考下,程序语言原理
ninesuns02
2008-05-27
打赏
举报
回复
再推荐几本好书:
《龙书》即:《编译原理 技术与工具》
《编译原理及实践》
《现代编译程序设计》
ninesuns02
2008-05-27
打赏
举报
回复
[Quote=引用:]
编译原理的学习体会和建议
编译原理一般认为是较难的一门课.从网上的评论来看,有人说学了一年半软件理论,就一门编译看不懂;有人甚至说它是大本软件课程里最难的一门;有人抱怨国内的编译教材没有一本容易懂的.从笔者学习实践来看,第一次学了一个多月,理论部分一知半解,第二次学了一星期,基本看懂词法分析的理论部分,语法分析就一知半解了,第三次学了一星期,才基本看懂词法分析和语法分析.由此看来,这门课确实有难度.网上有的帖子,把编译器的编写搞得高深莫测一般,似乎难度极大,非常人能及.
编译原理究竟难在哪里?笔者的体会,主要在这几点:
1. 错误认识: 很多人以为编译原理只能应用在写程序语言的编译器上,觉得用处不大,学习兴趣不高.而且可能觉得写编译器就必须完全手工来写.
2. 自动机理论: 象NFA,DFA之类,比较抽象,要费些脑子,特别如果学离散数学时没有学自动机理论的话,更是需要多花点时间.
3. 集合论的推演: 主要是一些闭包运算之类,数学基础不好的话,学起来也会感到吃力.
4. LR文法: 主要是又引入了自动机
不管哪本编译教材,即使是绝对经典”龙书”也不例外,都要涉及到这几个难点.由于这些内容本身不好懂,作者有再大的本事,也很难把书写得象小说那么流畅好懂.
明确了难点,接着想对策.大致有这么几种:
1. 端正认识: 编译原理在静态文本处理上有广泛的应用,举个简单的例子,把HTML文件转化为纯文本,利用编译原理来实现”非常”简单.理解了编译原理的实用性,大概可以提高学习兴趣.
2. 反复看书: 这个办法看起来最笨,却是基本的方法.忘了是哪位名人说过,书只要多看,总能看得懂的.
3. 结合源码来看: 这是经典教材Compiler Design in C的作者Allen Hollub建议的方法.这本教材的特色就是包含了大段yacc,lex的代码.这也是个好方法,而且,只有看懂了代码,才能说在根本上理解了理论.当然,要完全看懂yacc的代码,工作量是很大的,而且同样要先理解理论.
4. 删繁就简,避重就轻.网上流传较广的一篇《编译原理学习导论》(作者四川大学唐良)就基本是这种思路,对于词法分析,作者避免了自动机理论和集合论推演的介绍,直接搬出源码来,大大降低了理解难度,对于语法分析,作者介绍了递归下降和LL文法及相应的源码,而对LR文法,只说”理解理论就可以了”.虽然这种方法回避了对于难点的学习,但是用这种方法学习,可以在较短时间内编写出一个能够运行的词法分析器和语法分析器,可以大大提高学习积极性.
笔者的思路大体上类似第4种方法,但也稍有不同.由于一个偶然的原因, 笔者需要编写一个词法分析器和语法分析器,用于程序源代码的静态分析.开始无从下手,硬着头皮看了点编译原理,觉得困难很大.后来偶然找到一个类似的开源程序,是利用一个叫做PCCTS的编译器自动生成工具开发的,大受启发.开源就是好!笔者找来了一个叫做ANTLR的工具(它是PCCTS的新版,支持生成java,c++和c#代码),又下载了一个c语言的语法文件(因为笔者需要处理c代码文件),然后自己编了少量动作(action)语句,界面代码,分析处理代码等,就这样,在对编译原理所知甚少(以前学过的因为理解不深都忘了,只记得正则表达式)的情况下,仅用一个星期就写出了程序.
这次实践使笔者对编译原理兴趣大增,重新又学了一遍编译原理,并归纳出笔者认为比较实用有效的编译原理学习步骤:
1. 先利用ANTLR之类的编译器生成工具,做一个小程序(如上面提到的HTML文件转化成纯文本文件的程序),所需知识只是正则表达式的基本知识和生成工具本身的使用方法(可以看联机帮助和网上教程(tutorial)来掌握). 这样做的好处是:
1) 可以体会到编译原理的实用性,提高学习兴趣
2) 入门容易,消除编译原理学习的畏难情绪.
3) 获得词法分析器和语法分析器的感性认识,有利于加深对理论的理解.
4) 获得编译器自动生成工具(compiler compiler)的使用经验,提高解决实际问题的能力.(实际工作很多都不是手编而是利用工具的)
2. 象ANTLR之类的工具是开源(open source)的,可研究其源码,以便必要时自己手编分析程序.
3. 回过头来看编译原理教材. 这时大概会发现,很多理论很容易懂,剩下的只有上面说的几个难点,多看几遍,重点突破.
4. 结合教材所附源码,进一步加深对教材的理解.
这里顺便提一下,有的编译原理的教材,对于输入子系统不单立一章来讲,有的甚至完全忽略,笔者认为, 输入子系统相对于词法分析器和语法分析器来说当然简单地多,但也是两者的基础,故有必要看源码来理解.在这方面,ANTLR的实现机制和Lex是不同的(当然和java与c的差异有关),可对照着看.
笔者学习VC++时,深切体会到好教材的重要.笔者开始吃了劣质光盘版”教材”和”21天学VC++”的祸害,看了一个月还如入云雾之中,后来看了《VC++技术内幕》,方才豁然开朗.但是编译原理的教材却似乎质量相差不是特别大,关键还在于合适的方法.以上方法笔者也是误打误撞总结出来的,希望有所参考价值.
[/Quote]
hace1983
2008-05-26
打赏
举报
回复
学习中....
键盘比鼠标好用
2008-05-26
打赏
举报
回复
能不能用递归的?嘻嘻
开玩笑的..
lin29276
2008-05-26
打赏
举报
回复
[Quote=引用 4 楼 xushengcn 的回复:]
饶了我吧
[/Quote]
加载更多回复(13)
vc
一个
自己
写
的
编译器
一个
自己
写
的
编译器
,vc开发。 本来不应该要分的,但是没得办法,我没有积分了。
C#手
写
源码简易
编译器
ACCP
C#手
写
源码简易
编译器
C#手
写
源码简易
编译器
C#手
写
源码简易
编译器
《计算机体系结构》软件篇2 之
编译器
1 课程知识结构2 世界上第
一个
编译器
怎么来的3 第
一个
汇编编辑器怎么来的4 高级语言与高级语言
编译器
15 高级语言 与高级语言
编译器
26 高级语言与人类语言的关系 17 计算机语言与人类语言对比 28 举例理解词法、语法、语义分析9 词法、语法、语义错误例子10
C语言
编译器
与 预处理11 “链接“是什么12
C语言
可执行文件的格式13 如何选择一款
编译器
自己动手
写
编译器
、链接器_
编译器
_
本书讲述了
一个
真实
编译器
的开发过程源语言是以
C语言
为蓝本进行适当简化定义的一门新语言称之为S
C语言
(简化的
C语言
)目标语言是大家熟悉的Intelx86机器语言。在本书中读者将看到从 S
C语言
定义到SCC
编译器
开发的完整过程。本书介绍的SCC
编译器
没有借助Lex与 Yacc这些编译 器自动生成工具纯手工编
写
而成更便于学习和理解。为了生成可以直接运行EXE文件本书还实现了
一个
链接器。读完本书读者将知道一门全新的语言如何定义
一个
真实的
编译器
、链接器如何编
写
。 本书适合各类程序员、程序开发爱好者阅读也可作为高等院校编译原理课程的实践教材。
C语言
写
的
一个
编译器
源码
刚参加工作的时候搞的
一个
编译器
,这是伪编译哈,现在共享出来
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章