当前位置: 首页 > news >正文

编译器的作用和构成 (基础知识版)

如题 本文说一下 编译器的作用和基本的构成

都是一些基础的概念 便于理解, 了解下没有坏处 挺好的
主要的还是高深的编译方面的知识 我也不懂啊 hhhhhh…

编译器是干啥的?

用大白话讲 就是 把我们写的高级语言翻译为低级的语言
因为电脑就认识0和1
我们程序员不可能写这鸟玩意吧, 晦涩难懂
那么我们可以理解为 编译器 就是个 “翻译”
例如 把 c / c++ / java 等 翻译为 汇编 / 各个平台的机器码

编译器的基本构成

颗粒度高一点就是两部分
1.前端
2.后端

在这里插入图片描述

展开一点

1.前端

在这里插入图片描述
把我们c++代码 一行一行拆开 一个单词单词拆开
所以我们大部分的报错 都是前端编译器就给拦截了
比如少括号, 语法糖没过等等

那么前端的终极目标就是生成中间的代码
为啥要中间代码呢?

就可以理解为一种协议 各种语言各种平台 不可能每个编译器都做适配吧
举个例子就是 不管你什么样的汽车,奔驰宝马 还是夏利奥拓 都是要加油 就那么几种 #92 #95 #98 都是转为发动机需要的燃料嘛

2.后端

看完上面就应该比较明确了,后端的输入就是中间代码
输出就是汇编/各种平台的机器码

不同的cpu架构,需要的目标代码也不同,
在这里插入图片描述

总结:

基础的流程应该就是下图
在这里插入图片描述

相关文章:

  • 【什么时候使用分类 Objective-C语言】
  • 快速入门C++第七天——输入与输出
  • 栈和队列及表达式求值问题
  • 快速入门C++第六天——函数模板与类模板
  • gitlab自定义头像设置
  • 新库上线 | CnOpenData采矿业工商注册企业基本信息数据
  • 【Redis】基于Redis6的数据类型以及相关命令、应用场景整理
  • Qt使用qBreakpad定位崩溃位置
  • IAR+vscode开发环境搭建,千万别用,当心爱上
  • 一些 Next Generation ABAP Platform 的新语法用例
  • java面向对象思维程序设计开发以及案例 -电梯运行问题对象分析与程序设计(1)
  • vulnhub EMPIRE: BREAKOUT靶机
  • 【Python】PyQt5 Designer工具配置
  • Camera-MTK OpenCamera时序以及耗时
  • SpringCloud链路追踪SkyWalking-第二章-部署搭建及高可用
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 2017前端实习生面试总结
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • django开发-定时任务的使用
  • Linux中的硬链接与软链接
  • mac修复ab及siege安装
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 从零开始学习部署
  • 机器学习中为什么要做归一化normalization
  • 经典排序算法及其 Java 实现
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 那些被忽略的 JavaScript 数组方法细节
  • 收藏好这篇,别再只说“数据劫持”了
  • 通过npm或yarn自动生成vue组件
  • 小而合理的前端理论:rscss和rsjs
  • 译自由幺半群
  • 数据库巡检项
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • $.proxy和$.extend
  • (1)虚拟机的安装与使用,linux系统安装
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (理论篇)httpmoudle和httphandler一览
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)jQuery 基础
  • .net 4.0发布后不能正常显示图片问题
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • /dev下添加设备节点的方法步骤(通过device_create)
  • [ SNOI 2013 ] Quare
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术
  • [Android]常见的数据传递方式
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [C++]C++类基本语法