自举来源于自己提着鞋带把自己提起来, 编译器的自举就是用X语言自己开发的编译器来编译X语言本身。

比如python编译器的自举:

  1. 用C语言开发第一个python编译器 A

  2. 然后用python语言写个编译器 B,

  3. 用A编译器编译程序B,得到B.exe

  4. 接下来只要不断的修改源码B来完善B编译器,并用前一个生成的B.exe或者B2.exe编译修改后的B源码生成B2.exe即可。

  5. 最终B2.exe可能就是一个完备的python编译器。

编译过程一般分为:

字符流            -》 单词流                            -》 语法分析树                      -》 抽象语法树                                -》 修改后的中间代码    -》 目标语言(比如汇编)     -》 修改后的目标语言

扫描器(词法分析) -》 语法分析器(语法分析) -》 语义分析和中间代码生成  -》 与机器无关的代码改进(可选) -》 目标代码生成 -》 与机器有关的代码改进(可选)

上面的两行, 第一行是各个阶段所传递的信息, 第二行是编译的各个阶段。其中“词法分析” “语法分析” “语义分析”是 前端, 其他阶段是后端。

所谓编译器的前端是指, 判断出源码的意义; 编译器的后端就是构造出等价的目标代码

编译器的自举及实现过程相关推荐

  1. 灵魂拷问:用移位来代替除法运算真的效率高吗?Java 编译器到底有没有做除法优化?

    目录 引入 C++ 编译器对除法的优化 Java 编译器对除法的优化 移位运算对应的字节码 除法操作对应的字节码 查看及分析 JIT 即时编译结果 1.手动编译 OpenJDK 2.编译 hsdis- ...

  2. armgcc交叉编译的文件无法运行_认识GCC交叉编译器

    一.GCC 简介 GCC(GNU Compiler Collection)是一套功能强大.性能优越的编程语言编译器,它是GNU计划的代表作品之一.GCC 是 Linux 平台下最常用的编译器,GCC ...

  3. 计算机是如何读懂高级语言的——编译过程简述

    <计算机是如何读懂高级语言的--编译过程简述>源站链接,阅读体验更佳~ 前面的文章中我们简单介绍了高级语言的五大语法元素,以及这些语法元素是如何构成表达式,构成语句最终构成可执行的代码的. ...

  4. 结合编译过程,分析C++头文件和源文件的区别

    编译过程 简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 预处理阶段 词法与语法分析阶段 编译阶段,首先编译成纯汇编语句,再 ...

  5. u-boot启动过程

    目录: 一.初识u-boot 3 1,Bootloader介绍 3 2,Bootloader的启动方式 3 (1)网络启动方式 4 (2)磁盘启动方式 4 (3)Flash启动方式 4 3,U-boo ...

  6. 在线python编程编译器-编译器python

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 一.解释型语言pythonpython语言是一种解释型.面向对象.动态数据类型的高 ...

  7. python解释器是什么-python编译器和解释器的区别是什么

    python编译器和解释器的区别是什么 发布时间:2020-09-09 13:53:59 来源:亿速云 阅读:109 作者:小新 小编给大家分享一下python编译器和解释器的区别是什么,相信大部分人 ...

  8. 【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )

    文章目录 一.在 Android Studio 中创建 Native C++ 工程 二.C/C++ 源码编译过程 三.Makefile 工具 四.CMake 引入 该系列博客的应用场景是 Androi ...

  9. java程序编译_Java程序的编译过程

    Java的编译期是一个模糊的概念,需要具体分析. 将 *.java文件转为 *.class的过程称为编译器的前端(前端编译).例如:JDK的javac编译器. 把字节码( *.class文件) 转变为 ...

  10. U-Boot启动过程--详细版的完全分析

    目录: 一.初识u-boot 3 1,Bootloader介绍 3 2,Bootloader的启动方式 3 (1)网络启动方式 4 (2)磁盘启动方式 4 (3)Flash启动方式 4 3,U-boo ...

最新文章

  1. How to Rate a Software Developer
  2. 升级mysql服务器二进制备份_MySQL二进制日志备份和恢复详解
  3. 素数推断算法(高效率)
  4. 数据结构与算法-day3-归并 快速排序
  5. TOMCAT部署项目的方式
  6. 程序员常见的坏习惯,你躺枪了吗?
  7. 数据挖掘原理与算法 K-Means算法
  8. tkinter 中给某个文本加上滚动条_Python Tkinter自制文本编辑器
  9. Java开发不得不会!java私塾初级模拟银源代码
  10. eas账号是什么意思_请问帐号和账号有什么区别,具体怎么用?
  11. 我想参加计算机俱乐部用英文翻译,加入音乐俱乐部的英文怎么写_我参加音乐俱乐部已经两年了。用英语咋说...
  12. 关于TP-Link和水星、迅捷三角关系的传闻~~
  13. 产品经理们都是怎样成为产品经理的?
  14. 2021-01-11小米随身wifi网络创建总是失败是什么问题?
  15. Leetcode力扣 MySQL数据库 1264 页面推荐
  16. 生产者消费者模型问题
  17. 常见的电子器件,这篇文章总结得很到位,你还不收藏吗?
  18. 六世喇嘛-仓央嘉措诗集
  19. python爬虫爬取股票软件数据_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储(转载)...
  20. linux卸载informatica,Informatica在linux下安装搭建

热门文章

  1. Windows 9预览版今秋发布 正式版明年推出
  2. 右上角的引用文献格式_论文标注参考文献格式
  3. “弹出USB大容量存储设备时出问题”的解决方法
  4. 【上位机教程】CANopen通信下一体化步进电机与台达PLC(AS228T)的应用
  5. 浏览器服务器响应报文查看,通过 Chrome浏览器 查看http请求报文
  6. arcgis批量裁剪tif文件
  7. 教你如何在github上提交代码(Window10示例,内含2021年github提交机制的更新变动)
  8. u盘盘符不显示 win10_Win10不显示U盘的盘符怎么办丨Win10不显示U盘的盘符解决方法...
  9. 金蝶K3WISE 销售订单序时簿即时库存的开发
  10. vue脚手架根据需要进行配置