当前位置:首页 » 编程软件 » 怎么写编译器

怎么写编译器

发布时间: 2023-05-23 11:30:50

❶ 汇编语言编译器是怎么编写的

最开始的编译器是机器语言写的,然后写出来支持部分之后,就可以用这部分继续编译其他部分的。

❷ 汇编语言的编译器是用什么写的呢

汇编编译器:把汇编语言源程序转换为机器语言的程序,汇编编译器也可以生成源代码列表文件,其中包括行号,内存地址,源代码语句,程序中使用的符号及变量,交叉引用列表.

在Windows/Dos 下可用的汇编编译器有Microsoft宏汇编编译器MASM,Borland Turbo Assember(TASM)和The NetWide Assembler(NASM),其中NASM是跨平台的编译器可用于Windows/Dos/Linux下.他们的语法相近,都是Intel语法风格. 在Linux下可用的汇编编译器有NASM,gas.NASM和gas的语法风格相去甚远,NASM使用的是Intel 语法风格的汇编语法,而gas使用的是AT&T的汇编语法风格.

❸ 在以前没有编译器,没有软件,人们是怎么去写编译器的

起初源于器件的闭合和携汪袜打开作为电脑最初的运行模式,然后有了最原始的机器语陵雹言,也就相当于现在的汇编,然后就在0和1的辩激基础下,有了更多的高级语言,而编译器也正是将这样的高级语言转换为0和1的过程

❹ 如何写一个简单的编译器

其实编译器的原理一点都不复杂。就两部分,scanner和宏世parser,姿绝敬前者附则tokenization后者负责parsing。
难点在于你怎样设计你的语言。要想简单,那就设计一个只能算加减乘除的计算机就是了。要想复杂...你去试着编译一下scala...听说官方编译器编译scala用了21步,我估计这应该是最复杂的编译器迹慎了吧。

❺ 如何利用LLVM写一个编译器

LLVM有自己的教程,如果你只想做个玩具,那可以首先试着实现LLVM Tutorial: Table of Contents的Kaleidoscope。深入的,请看他的文档http://llvm.org/docs/

Kaleidoscope是一个范式简单的脚本语言,教程里的词法,语法分析都是手写的,基本流程就是词法语法解析,利用LLVM的API生成中间代码并执行。

我用visual studio编译的LLVM(version 3.6)实现过Kaleidoscope,我遇到的坑不少,如果你想以visual studio编译的LLVM实现Kaleidoscope,你可能同样会遇到

1. LLVM的生成目标对象为ELF格式,在windows下使用JIT的API时会出现incompatible object format的错误警告,需要在通过重新设定Mole的triple,我的PC的getTargetTriple的结果是“i686-pc-windows-msvc”,直接在后面再加上“-elf”即可

TheMole->setTargetTriple("i686-pc-windows-msvc-elf");

2. LLVM不支持windows下通过动态链接导出函数,如果需要使用C/C++的函数,需要通过addSymbol进行注册

llvm::sys::DynamicLibrary::AddSymbol(/*std::string("_") +*/ "printd", &printd);

3. Kaleidoscope里使用的JIT的查找函数的API,getPointerToFunction已经被弃用了,需要替换为getFunctionAddress

❻ 如何自己写一个编译器

编译器的编写涉及一些专业编写工具和一些专业技能代码,自己想编写的话只能用工具套比较简单的代码直接带入,未必能达到自己要的效果

❼ 汇编语言的编译器是用什么语言写的,为什么

直接用指令码写出第一个汇编语言编译器,然后就可以用汇编语言写新的编译器,其实很多语言都可以写汇编编译器

比如第一个C语言编译器可能是用汇编写的,但是以后的C编译器都可以用C语言来写,神奇吧,哈哈

❽ 自己写编译器怎么写,我想为中国程序员做个编译C语言的编译器。

1、第一个C语言编译器应该是用汇编写的,但是第一个成熟的C语言编译器应该是由汇编和C语言共同写的。
2、编译原理讲到了“自举编译器”。大意就是先用底层语言(应该是汇编)写一个能运行,但效率极低的C语言编译器(底层语言不好优化),有了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等动态语言
虎书中也有描述。当然看自己功力了

❿ 第一个 C 语言编译器是怎样编写的

第一个C语言编译器
是先制定了简单的C语法后,用B语言写的
这个是C语言的前身。
当时B语言已经比较成熟 只不过 没有C强大
于是 发明了C语言
之所以叫C,其实也是因为在B基础上加一。

后续的C编译器 就都是用C写的了。

热点内容
solidworkspcb服务器地址 发布:2025-07-18 22:50:35 浏览:815
怎么在堆叠交换机里配置vlan 发布:2025-07-18 22:42:35 浏览:623
java调用别人的接口 发布:2025-07-18 22:37:35 浏览:433
服务器四个节点如何联网 发布:2025-07-18 22:36:02 浏览:271
华强北什么地方休安卓手机 发布:2025-07-18 22:24:56 浏览:735
数据库的根本目标 发布:2025-07-18 21:37:50 浏览:938
压缩机的流速 发布:2025-07-18 21:37:40 浏览:407
三星怎么取消手机密码 发布:2025-07-18 21:33:50 浏览:630
安卓手机耳机如何弹窗显示电量 发布:2025-07-18 21:20:53 浏览:60
云服务器搭建需要什么工具 发布:2025-07-18 20:51:08 浏览:322