如何自己写编译器
❶ 怎样去写一个编译器(用C语言写C语言编译器),需要哪些知识做铺垫,可以给一下相关网站和书籍的推荐吗
书籍请参考编译原理的龙书,以及flex,bison,llvm的manual。
如何写我可以给你一个大致的流程,
编译器由词法分析器->语法分析器->中间代码生成器->后端组成。
用C语言写编译器一般可以按照以下步骤:
1.使用flex生成词法分析器。(flex可以通过自己编写的描述文件来自动生成词法分析器)
2.使用bison生成语法分析器。(bison可以通过自己编写的描述文件来自动生成语法分析器)
3.通过语法分析器得到输入代码的语法树表示。
4.编写遍历函数遍历语法树生成中间代码。(这里推荐使用LLVM的中间代码表示)
5.利用LLVM工具集来编译执行所得到的中间代码。
相关网站:
龙书(当当上去买一本)
http://dinosaur.compilertools.net/flex/index.html(flex手册)
http://dinosaur.compilertools.net/bison/index.html(bison手册)
http://www.llvm.org(LLVM官网)
❷ 如何用c写一个编译器
先学编译原理。
然后根据步骤,
1 处理预编译
2 词法分析
3 语法分析
4 语义分析
5 中间代码转换
6 二进制代码生成。
简单起见,不需要考虑优化。 初期可以不需要支持太多语法。
❸ 自己写编译器怎么写,我想为中国程序员做个编译C语言的编译器。
首先做这个东西的意义并不大,如果是想学习的话,看看这本书Modern Compiler by Andrew W. Appel
❹ 如何写一个简单的编译器
如果你想写一个简单的编译器,那么首先你要有写软件的才能,或者是你要会有变形软件这方面的技术。那么你就可以很简单的编写一个编译器。或者你可以叫我别人帮你写一个编译器
❺ 如何写一个简单的编译器
因为我这里都只写了 Parser ,所以就只谈谈第一次写 Parser 的建议。
1. 扔掉龙书虎书鲸鱼书。这些书都有一个问题,就是在自己手写完一个自己的 Parser 之前,书上写的那些鬼东西完全都不知道该怎么用,用在哪里。
2. 大胆地撸。不要在意性能啊,扩展性,复用啊这些鬼东西,先把东西做出来再说。
3. 记住代码只不过是格式化文本。不要觉得代码是什么复杂的东西,它跟 Json / XML 这些东西没啥太大区别。Parser 的意义就是把人能看懂的格式化数据编程计算机能看懂的格式数据。
❻ 如何自己写一个编译器
编译器的编写涉及一些专业编写工具和一些专业技能代码,自己想编写的话只能用工具套比较简单的代码直接带入,未必能达到自己要的效果
❼ 如何编写自己的编译器
我晕,你们老师真NB,你学的什么语言啊?是c吗?上来就让你做个编译器,你们老师吃错药了吧?
我大学同学毕业设计才是做个编译器,那会那俩人合作做的,还都是我们系公认的c最强的两个,合作还做了半年,你认为大一刚上来就做这个?!
❽ 怎么开始动手自己写一个编译器,编译器的理论学习该从
编译器的目标是写编程语言,学习编译器理论,现已有专门编译器原理的书籍,中文和原文都有。不过要在编译器方面有建树很难,至少 编译器-编程语言-操作系统-界面编写-芯片汇编 他们要捆绑在一块的。
❾ 汇编语言编译器是怎么编写的
编译器自举!搜索这个关键字
程序都是编译器编译的。这个是肯定的
至于第一款X语言编译器是不是直接1010101010自己写的那就不知道啦
一般开发编译器的话。有两条路选择
1.利用yacc(或者其变种)&lex(词法分析)-等工具自己生成语法模板
词法语法都可以使用这些工具自己生成
然后自己编写生成的中间码和生成的机器码就可以了
一般做编译原理类似试验都是如此的。许多编译器也的确是这样
2.自己写词法分析和语法分析。可以参考一些开源的编译器
lcc-这个是ANSI C99标准的编译器是开源的
或者nasm,watcom等编译器到www.sf.net上不少开源的编译器
总的来说。高级语言编译器比较难写
如果想快速写出一个的话
可以采用第一种做法。利用工具生成语法词法模板
先写一个简单的汇编编译器比较简单
开源的有nasm,jwasm(支持masm语法开源的编译器)
http://www.japheth.de/JWasm.html
fasm(这款编译器是自举的.就是自己可以编译自己),
http://flatassembler.net/
剩下的就是自己做好语言规则关键字map
引用高手的话。语言map做好了你的编译器也做好一半了
剩下的都是机械性的工作了。
生成x86或者arm指令。
优化工作这个很难解释.根据你所需要的做吧
毕竟可以做出一个无错,又XX的编译器已经很难得
你可以选择使用现有的编译器开发自己的编译器
然后等到你的编译器支持相当数量指令和成熟度的时候
使用自己的语法重新写一遍编译器.
这样你就可以用自己的编译器开发自己的编译器了(是不是很邪恶?)
另外举几个例子
Delphi的编译器是C++ Builder开发的。
而C++ Builder的IDE是Delphi开发的
C++ Builder的编译器是C++ Builder开发的-这个就是编译器自举了。。Delphi和C++ Builder共享一个后端化优化器。
Delphi 早期的版本的编译器是tasm直接编译的。可见Anders的汇编功力多强悍(Anders也就是后来VJ++,C#,.NET工程的核心架构师.最关键的灵魂级人物)
VC++的编译器是VC++开发的。很明显这都说明了编译器自举
自己开发自己。如果一个编译器可以做到自己编译自己。那基本上就可以实现任何功能了。
关于编译器开发的书籍可以看一下
龙书《编译原理(第二版)》
虎书《现代编译原理-C语言描述》
鲸书《高级编译器设计与实现》
建议从鲸书看起。然后是龙书
再来是虎书--虎书里面描述了许多现代编译器(正如其名)技术
例如面向对象啦,优化,垃圾回收等等.
鲸书看完基本上就可以实现一个简单的Tiny C编译器了
然后在龙书巩固,读一下语言规范,自己看一些开源的汇编编译器代码
自己就可以尝试做一个汇编语言编译器了.等到技术提高了
在尝试做一些高级语法识别,参考LCC代码做一下ANSI C99的
C语言编译器。再来就看你自己的兴趣和领悟度拉
如果想支持C++的话就得要对编译器做许多方便的研究
类似Java那种跨平台或者Ruby,Python等动态语言
虎书中也有描述。当然看自己功力了