① 汇编语言编译器是怎么编写的
编译器自举!搜索这个关键字
程序都是编译器编译的。这个是肯定的
至于第一款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等动态语言
虎书中也有描述。当然看自己功力了
② 怎样去写一个编译器(用C语言写C语言编译器),需要哪些知识做铺垫,可以给一下相关网站和书籍的推荐吗
写编译器重点就是设计并实现一些数据结构和算法,语言特点太多的话,代码写起来不容易,建议你找一个小语言尝试下,不要一开始就去尝试成熟语言。否则你会在写完语法分析程序以后,遭遇到很大的困难。多数人都是在写语义分析程序的时候,突然发现自己设计的数据结构很烂,后边越写越要命。
如果你想入门编译器的话,那么可以看《编译原理与实践》,整本书先将编译器理论,然后后边教你一步步实现c-miuns(c的子集)的编译器,包括lex,yacc,都在几千行代码左右。这本书讲的比较简单易懂一点
也可以学学斯坦福大学的编译器设计公开课(aiken设计了一个叫cool的语言,专门用来教人写编译器),课程地址上面有人给了:Compilers。这门课以前有个实验环境(据说已经给了,我以前写的时候还是用的网上一个不完整的实验环境),把和编译器知识无关的内容都给你写好了,你只需要在固定的地方填上你的内容就可以写出你的编译器(不要觉得很简单哦,人家的代码写的很精巧的,读完就发现写个好编译器还是很费脑子的),另外,这个实验环境有个特点,就是在每一步都提供标准程序做对比,你可以在写完一部分以后就同标准程序对比,及时发现错误。这种方式为写编译器又提供了很多帮助
先找个小的,慢慢研究,弄懂了整体的结构再说
③ 我想用JAVA做个简易编译器,说说思路,或者有没有现成的代码JAVAC的代码有吗
要写编译器?自己开发语言?很牛X,先赞一个!
自己写编译器,原理其实不难,就那么点东西。找一个编译原理看明白就OK了,词法、语法、语义、语境。
这些东西用一些自动机,图灵机,范式,正规之类的就可以搞定。分析嘛,什么逆波兰,树形,一共也没几种的。
但最难做的是优化,还有机器代码生成这二部分。
优化怎么做?你的中间代码放哪?先优化还是先生成中间代码?
机器代码怎么搞?用汇编?还是直接和机器特性相关?
反正这二点我是晕,虽然原理还是那点东西,但真搞起来,我一点思路都没有。。。
国内写编译器的有,但都不是很牛X。
想要写好,还得多看E文资料。
加油吧。
④ 如何编写简单的java编译器(用java语言),比如说能翻译诸如"public static void main" 的就行。
看看《编译原理》或许对你有帮助。
要编译一门语言,你要知道它的语法 syntax 和语义 semantics,语法是用来检查所谓的“语法错误”,语义是让语句变得有意义,对计算机程序语言来说,就是把它翻译成计算机能执行的指令。
你需要了解最基本的一些概念诸如正则表达式,上下文无关语言,上下文相关语言,等等。
《编译原理》是很通用的基础书籍,里面我记得有介绍了 yacc 的用法,这是 GNU 里的一款编译器的编译器,对应有一个 Java 的 Project 叫 yacc for Java,你可以去 google 找一下。
如果你能写出一个检查语法错误的程序就已经很不错了,你可以考虑改做一个编辑器之类的软件(只需要找错,不需要编译)。如果你真要做编译器,工程量巨大不说,你首先需要对至少两种语言都熟悉,你需要对计算机的指令和它的执行方式有深刻理解,尤其是 Java 这种动态的高级语言,有类啊对象啊什么的,要把它翻译成机器指令实属不易,至今除了 Sun 的 javac 都没有很成功的编译器,那个 GCJ(把 Java 编译成本地代码)的尝试也只成功了一半,以前还被 MingW 包含在工具箱里(和 GCC 什么的一起),但是有很多特性不支持,而且已经很久不更新了,新版本的 MingW 里都没有了。想一个人从零开始设计一款 Java 的编译器,即使是专家都做不到啊。
⑤ 制作一个简单的编译器
还能编译汇编。。。
我晕。。。
我想这个不是一般人可以做到的,祝你好运!
如果你仅仅针对文本编辑器的话就好办了。
⑥ 如何用basic语言实现一个最简单的解释器/编译器
首先Basic语言是解释型的语言,而C语言是编译型的语言。什么意思呢,就是你编写的Basic语言程序运行的时候需要一个解释器将高级语言代码转为机器码然后才可以执行。C语言程序一般经过编译和联接后直接生成目标代码。目标代码本身就是机器码所以可以直接运行。
从语法来看,C语言是面向过程的语言。Basic语言严格意义上只是一个脚本语言,语法相对来讲非常简单。
另外,C语言是最接近汇编语言的一种语言,功能非常强大,但是要求开发人员对硬件,操作系统等底层的东西要有很深的了解,开发程序相对来讲麻烦一些,但是程序性能非常好。Basic语言相封装了很多底层的东西,所以不要求开发人员有很深的计算机专业背景,开发简单,但是不要指望用Basic语言开发真正的商业程序。
由于以上的区别,造成这两种语言的用途不一样。Basic语言常用来写一些脚本,或者在真正开发之前作一个软件模型。实际开发用C语言以确保运行速度和较小的内存需求等其他性能。
显然,这两种语言还有其他区别,但上面应该是最重要的区别吧
⑦ 如何写一个简单的编译器
因为我这里都只写了 Parser ,所以就只谈谈第一次写 Parser 的建议。
1. 扔掉龙书虎书鲸鱼书。这些书都有一个问题,就是在自己手写完一个自己的 Parser 之前,书上写的那些鬼东西完全都不知道该怎么用,用在哪里。
2. 大胆地撸。不要在意性能啊,扩展性,复用啊这些鬼东西,先把东西做出来再说。
3. 记住代码只不过是格式化文本。不要觉得代码是什么复杂的东西,它跟 Json / XML 这些东西没啥太大区别。Parser 的意义就是把人能看懂的格式化数据编程计算机能看懂的格式数据。