社区
C语言
帖子详情
咋样用C语言写一个C语言编译器
秋刀鱼
2008-05-23 09:59:24
咋样用C语言写一个C语言编译器,请各位大侠提供点思路,或应该看那些书,本人根本是就不知道从哪下手,谢谢啦
...全文
2141
32
打赏
收藏
咋样用C语言写一个C语言编译器
咋样用C语言写一个C语言编译器,请各位大侠提供点思路,或应该看那些书,本人根本是就不知道从哪下手,谢谢啦
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
contos7依赖包,免费下载 某些人真恶心拿着资源抢分抢钱 此处也有免费下载:http://mirrors.aliyun.com/centos/7/os/x86-64/Packages/
bzip2-devel-1.0.6-13.el7.i686.rpm centos-release-scl-2-3.el7.centos.noarch.rpm centos-release-scl-rh-2-3.el7.centos.noarch.rpm cloog-ppl-0.15.7-1.2.el6.x86_64.rpm cpp-4.4.7-4.el6.x86_64.rpm cpp-4.8.5-44.el7.x86_64.rpm dejavu-fonts-common-2.33-6.el7.noarch.rpm dejavu-sans-fonts-2.33-6.el7.noarch.rpm fontconfig-2.13.0-4.3.el7.x86_64.rpm fontpackages-filesystem-1.44-8.el7.noarch.rpm freetype-2.8-14.el7.src.rpm freetype-2.8-14.el7.x86_64.rpm freetype-devel-2.8-14.el7.x86_64.rpm gcc-4.4.7-4.el6.x86_64.rpm gcc-4.8.5-44.el7.x86_64.rpm gcc-c++-4.4.7-4.el6.x86_64.rpm gcc-c++-4.8.5-44.el7.x86_64.rpm gcc-gfortran-4.8.5-44.el7.x86_64.rpm glibc-2.17-307.el7.1.x86_64.rpm glibc-2.17-317.el7.x86_64.rpm glibc-common-2.17-317.el7.x86_64.rpm glibc-devel-2.12-1.132.el6.x86_64.rpm glibc-devel-2.17-307.el7.1.x8
个人开发轻量级资产管理系统,python3+Django2+adminLTE,大佬请忽略。.zip
个人开发轻量级资产管理系统,python3+Django2+adminLTE,大佬请忽略。
文件加密器原创文件加密器 -Python 开发的密码加密解密工具.zip
这款文件加密器是一款基于 Python 开发的原创工具,旨在为用户提供便捷的文件加密与解密功能。用户可通过自行设置密码,对文件进行加密处理,有效保护文件隐私;解密时,输入正确密码即可恢复文件原貌,操作简单直观。 工具特点如下: 自主密码管理:加密和解密密码由用户自行输入,确保加密过程的安全性与私密性。 源码与可执行文件兼备:提供 Python 源码及打包后的 EXE 文件,满足不同用户需求 —— 懂编程的用户可查看、修改源码,普通用户可直接运行 EXE 文件使用。 安全性保障:经检测无毒,可放心使用(注:下载后建议再次通过安全软件扫描确认)。(包含源码和打包 EXE,文件大小 56.0M) 此外,开发者还提供了多张屏幕截图(如操作界面展示等),可供用户提前了解工具的使用场景和界面样式,进一步降低使用门槛。
python初学者
写
的班级管理系统(单个.py文件).zip
python初学者
写
的班级管理系统(单个.py文件)
spring-jcl-5.0.5.RELEASE.jar中文文档.zip
1、压缩文件中包含: 中文文档、jar包下载地址、Maven依赖、Gradle依赖、源代码下载地址。 2、使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 3、特殊说明: (1)本文档为人性化翻译,精心制作,请放心使用; (2)只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; (3)不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 4、温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件。 5、本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册。
C语言
70,026
社区成员
243,262
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章