怎么写编译器

1. 怎样去写一个编译器(用C语言写C语言编译器),需要哪些知识做 写编译器重点就是设计并实现一些数据结构和算法,语言特点太多的话,代码写起来不容易,建议你找一个小语言尝试下,不要一开始就去尝试成熟语言 。否则你会在写完语法分析程序以后,遭遇到很大的困难 。多数人都是在写语义分析程序的时候,突然发现自己设计的数据结构很烂,后边越写越要命 。
如果你想入门编译器的话,那么可以看《编译原理与实践》,整本书先将编译器理论,然后后边教你一步步实现c-miuns(c的子集)的编译器,包括lex,yacc,都在几千行代码左右 。这本书讲的比较简单易懂一点
也可以学学斯坦福大学的编译器设计公开课(aiken设计了一个叫cool的语言,专门用来教人写编译器),课程地址上面有人给了:Compilers 。这门课以前有个实验环境(据说已经给了,我以前写的时候还是用的网上一个不完整的实验环境),把和编译器知识无关的内容都给你写好了,你只需要在固定的地方填上你的内容就可以写出你的编译器(不要觉得很简单哦,人家的代码写的很精巧的,读完就发现写个好编译器还是很费脑子的),另外,这个实验环境有个特点,就是在每一步都提供标准程序做对比,你可以在写完一部分以后就同标准程序对比,及时发现错误 。这种方式为写编译器又提供了很多帮助
先找个小的,慢慢研究,弄懂了整体的结构再说
2. 汇编语言编译器是怎么编写的 编译器自举!搜索这个关键字
程序都是编译器编译的 。这个是肯定的
至于第一款X语言编译器是不是直接1010101010自己写的那就不知道啦
一般开发编译器的话 。有两条路选择
1.利用yacc(或者其变种)&lex(词法分析)-等工具自己生成语法模板
词法语法都可以使用这些工具自己生成
然后自己编写生成的中间码和生成的机器码就可以了
一般做编译原理类似试验都是如此的 。许多编译器也的确是这样
2.自己写词法分析和语法分析 。可以参考一些开源的编译器
lcc-这个是ANSI C99标准的编译器是开源的
或者nasm,watcom等编译器到上不少开源的编译器
总的来说 。高级语言编译器比较难写
如果想快速写出一个的话
可以采用第一种做法 。利用工具生成语法词法模板
先写一个简单的汇编编译器比较简单
开源的有nasm,jwasm(支持masm语法开源的编译器)
fasm(这款编译器是自举的.就是自己可以编译自己),
patible object format的错误警告,需要在通过重新设定Module的triple,我的PC的getTargetTriple的结果是“i686-pc-windows-msvc”,直接在后面再加上“-elf”即可
TheModule->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
4. 编写一个操作系统,应该先编写一个编译器 可以用C编写也可以用别的语言编写 。
我在解释下吧,```看样子我没解释的详细 。最原始的C语言编译器估计是用汇编语言写的,而汇编器估计是用机器码强写的,而机器码的规则是设计CPU架构的人规定的 。而所有的理论基础,你就带仔细查看50,60年代的大牛了,图灵,冯诺依曼,knuth……之类的人给出理论上的证明和可行性,编译器的设计在knuth给出了LR(K)算法后才开始有了质的飞跃 。