编译器的自举及实现过程
自举来源于自己提着鞋带把自己提起来, 编译器的自举就是用X语言自己开发的编译器来编译X语言本身。
比如python编译器的自举:
用C语言开发第一个python编译器 A
然后用python语言写个编译器 B,
用A编译器编译程序B,得到B.exe
接下来只要不断的修改源码B来完善B编译器,并用前一个生成的B.exe或者B2.exe编译修改后的B源码生成B2.exe即可。
最终B2.exe可能就是一个完备的python编译器。
编译过程一般分为:
字符流 -》 单词流 -》 语法分析树 -》 抽象语法树 -》 修改后的中间代码 -》 目标语言(比如汇编) -》 修改后的目标语言
扫描器(词法分析) -》 语法分析器(语法分析) -》 语义分析和中间代码生成 -》 与机器无关的代码改进(可选) -》 目标代码生成 -》 与机器有关的代码改进(可选)
上面的两行, 第一行是各个阶段所传递的信息, 第二行是编译的各个阶段。其中“词法分析” “语法分析” “语义分析”是 前端, 其他阶段是后端。
所谓编译器的前端是指, 判断出源码的意义; 编译器的后端就是构造出等价的目标代码
编译器的自举及实现过程相关推荐
- 灵魂拷问:用移位来代替除法运算真的效率高吗?Java 编译器到底有没有做除法优化?
目录 引入 C++ 编译器对除法的优化 Java 编译器对除法的优化 移位运算对应的字节码 除法操作对应的字节码 查看及分析 JIT 即时编译结果 1.手动编译 OpenJDK 2.编译 hsdis- ...
- armgcc交叉编译的文件无法运行_认识GCC交叉编译器
一.GCC 简介 GCC(GNU Compiler Collection)是一套功能强大.性能优越的编程语言编译器,它是GNU计划的代表作品之一.GCC 是 Linux 平台下最常用的编译器,GCC ...
- 计算机是如何读懂高级语言的——编译过程简述
<计算机是如何读懂高级语言的--编译过程简述>源站链接,阅读体验更佳~ 前面的文章中我们简单介绍了高级语言的五大语法元素,以及这些语法元素是如何构成表达式,构成语句最终构成可执行的代码的. ...
- 结合编译过程,分析C++头文件和源文件的区别
编译过程 简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 预处理阶段 词法与语法分析阶段 编译阶段,首先编译成纯汇编语句,再 ...
- u-boot启动过程
目录: 一.初识u-boot 3 1,Bootloader介绍 3 2,Bootloader的启动方式 3 (1)网络启动方式 4 (2)磁盘启动方式 4 (3)Flash启动方式 4 3,U-boo ...
- 在线python编程编译器-编译器python
广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 一.解释型语言pythonpython语言是一种解释型.面向对象.动态数据类型的高 ...
- python解释器是什么-python编译器和解释器的区别是什么
python编译器和解释器的区别是什么 发布时间:2020-09-09 13:53:59 来源:亿速云 阅读:109 作者:小新 小编给大家分享一下python编译器和解释器的区别是什么,相信大部分人 ...
- 【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )
文章目录 一.在 Android Studio 中创建 Native C++ 工程 二.C/C++ 源码编译过程 三.Makefile 工具 四.CMake 引入 该系列博客的应用场景是 Androi ...
- java程序编译_Java程序的编译过程
Java的编译期是一个模糊的概念,需要具体分析. 将 *.java文件转为 *.class的过程称为编译器的前端(前端编译).例如:JDK的javac编译器. 把字节码( *.class文件) 转变为 ...
- U-Boot启动过程--详细版的完全分析
目录: 一.初识u-boot 3 1,Bootloader介绍 3 2,Bootloader的启动方式 3 (1)网络启动方式 4 (2)磁盘启动方式 4 (3)Flash启动方式 4 3,U-boo ...
最新文章
- How to Rate a Software Developer
- 升级mysql服务器二进制备份_MySQL二进制日志备份和恢复详解
- 素数推断算法(高效率)
- 数据结构与算法-day3-归并 快速排序
- TOMCAT部署项目的方式
- 程序员常见的坏习惯,你躺枪了吗?
- 数据挖掘原理与算法 K-Means算法
- tkinter 中给某个文本加上滚动条_Python Tkinter自制文本编辑器
- Java开发不得不会!java私塾初级模拟银源代码
- eas账号是什么意思_请问帐号和账号有什么区别,具体怎么用?
- 我想参加计算机俱乐部用英文翻译,加入音乐俱乐部的英文怎么写_我参加音乐俱乐部已经两年了。用英语咋说...
- 关于TP-Link和水星、迅捷三角关系的传闻~~
- 产品经理们都是怎样成为产品经理的?
- 2021-01-11小米随身wifi网络创建总是失败是什么问题?
- Leetcode力扣 MySQL数据库 1264 页面推荐
- 生产者消费者模型问题
- 常见的电子器件,这篇文章总结得很到位,你还不收藏吗?
- 六世喇嘛-仓央嘉措诗集
- python爬虫爬取股票软件数据_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储(转载)...
- linux卸载informatica,Informatica在linux下安装搭建
热门文章
- Windows 9预览版今秋发布 正式版明年推出
- 右上角的引用文献格式_论文标注参考文献格式
- “弹出USB大容量存储设备时出问题”的解决方法
- 【上位机教程】CANopen通信下一体化步进电机与台达PLC(AS228T)的应用
- 浏览器服务器响应报文查看,通过 Chrome浏览器 查看http请求报文
- arcgis批量裁剪tif文件
- 教你如何在github上提交代码(Window10示例,内含2021年github提交机制的更新变动)
- u盘盘符不显示 win10_Win10不显示U盘的盘符怎么办丨Win10不显示U盘的盘符解决方法...
- 金蝶K3WISE 销售订单序时簿即时库存的开发
- vue脚手架根据需要进行配置