【编译原理】编译器概述、编译器结构、编译器实例

编译器概述、编译器结构、编译器实例

编译器概述

1.编译器是一个程序
核心功能是把源代码翻译成目标代码
比如源代码:C/C++,Java,C#,html
目标代码:X86,IA64,ARM,…

把一种源程序翻译成另外一种源程序,例如:将C++ 利用Cfront翻译成C语言(广义上)
把源程序翻译成目标代码,比如:C语言翻译成X86

源代码经过编译器的翻译生成目标代码(静态计算,不执行这个代码,要保证语义相同,语义保持

真实的计算机 或 JVM虚拟机 通过对目标代码进行动态计算得到结果

解释器:解释器也是处理程序的一种程序

编译器:gcc g++ 得到可执行程序 离线的方式 offline
解释器 处理过程 得到结果 在线 online

编译器的高层结构

编译器具有非常模块化的高层结构

输入→前端()→后端()→输出
前端:做词法分析、语法分析的部分
后端:做指令生成、指令优化的部分

抽象的多个阶段(phase)
编译器可以看成多个阶段构成的“流水线”结构

典型编译器高层结构
一种没有优化的编译器结构
1.词法分析(第一个阶段 字符序列处理后得到 记号序列 )
2.语法分析(记号序列 处理后 建立 抽象语法树)
3.语义分析(对语法树的合法性进行处理,程序没有语义语法的错误后 得到中间代码,如果这个语义没错,后面步骤就不会再报错了,这里已经将代码的语法语义检测完毕)
4.代码生成(由中间代码 生成目标代码)

符号表:存取了编译过程中的相关信息,和上述阶段都有联系

更复杂的一种编译器结构
在这里插入图片描述

**小结:**编译器由多个阶段组成,每个阶段都要处理不同的问题(使用不同的理论、数据结构和算法)
编译器设计中的重要问题是如何 合理的划分组织各个阶段
接口清晰
编译器容易实现、维护

编译器示例

规则
在这里插入图片描述
编译器实现:
任务:编译程序1+2+3到栈式计算机
(左结合)
“1+2+3” 用树来存储(中序遍历)AST
前端语法分析 代码生成(使用树的后序遍历 post-order) stack

  1. 遇到的节点是n的话就push n
  2. 遇到的节点是加号的话就生成代码“add”

在这里插入图片描述
阶段一:词法分析
阶段二:语法树生成
在这里插入图片描述

阶段三:代码生成
在这里插入图片描述

小结

  1. 编译器的构造和具体的编译器目标相关,
    前端负责将输入的 变成语法树(中间表示)
    后端做代码生成(生成stack)也就是目标代码。
  2. 任务:增加一个代码优化的阶段
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Facebook的秘密算法:如何提升你的社交体验

在数字时代,社交媒体平台已经成为我们日常生活的重要组成部分。作为全球最大的社交网络之一,Facebook通过其复杂的算法,影响着亿万用户的社交体验。这些算法不仅决定了我们在平台上看到的内容,还在背后默默优化我们的互动方式。本…

[数据集][目标检测]汽车头部尾部检测数据集VOC+YOLO格式5319张3类别

数据集制作单位:未来自主研究中心(FIRC) 版权单位:未来自主研究中心(FIRC) 版权声明:数据集仅仅供个人使用,不得在未授权情况下挂淘宝、咸鱼等交易网站公开售卖,由此引发的法律责任需自行承担 数据集格式:Pascal VOC格…

SpringSecurity剖析

1、SpringSecurity 入门 1.1、简介 Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的实际标准。Spring Security是一个框架,致力于为Java应用程序提供身份验证和授权。与所有Spring项目一样,Sp…

红帽RHCE认证值不值得考?RHCE认证有什么用?

在IT行业,红帽认证作为一项衡量Linux技能水平的重要标准,受到了广泛的关注和认可。 拥有一张权威认证证书无疑是提升自身竞争力、实现职业发展的重要途径。 RHCE认证作为Linux领域的顶级认证之一,其价值和意义不言而喻。 那么,…

工作中遇到了一个线程中断异常

工作中遇到了一个线程中断异常,备忘记录一下。 主线程使用CompletableFuture开辟子线程进行了并行查询,但其中某个子线程执行时发生异常,没有捕获。 结果就在主线程等待所有子线程都执行完毕时报ExecutionException 从而对主线程打上了中断标…

PowerBi 柱形图,数据标签无法显示在端外

如图 即使设置了“数据标签”显示“端外“,仍然不作用。 原因其实是因为Y轴的数据范围设置不当,如图,当前Y轴范围是0到自动 只需要修改为最大和最小值都是自动即可,选中0 按backspace键删除,然后,鼠标在任意…

机器学习-------数据标准化

什么是归一化,它与标准化的区别是什么? 一 作用 在做训练时,需要先将特征值与标签标准化,可以防止梯度防炸和过拟合; 将标签标准化后,网络预测出的数据是符合标准正态分布的—StandarScaler()&#xff0c…

排班系统|基于Springboot+vue的医护人员排班系统(源码+数据库+文档)

排班系统|医护人员排班系统 目录 基于Springbootvue的医护人员排班系统 一、前言 二、系统设计 三、系统功能设计 医护类型管理 排班类型管理 科室信息管理 医护信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&…

CSS3 var() 函数:解锁动态样式与高效维护的密钥

在CSS3中,var()函数是一个强大的特性,它允许我们在样式表中定义可重用的值,并在多个地方引用它们。这种机制不仅提高了代码的可维护性和灵活性,还使得动态更新样式成为可能。本文将深入解析CSS3中的var()函数,包括其用…

C语言代码练习(第十八天)

今日练习: 48、猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时&…

【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)

文章目录 PyQt5超详细教程前言第7部分:生成图表与数据可视化7.1 matplotlib 与 PyQt5 的结合7.2 在 PyQt5 中嵌入 matplotlib 图表示例 1:嵌入简单的 matplotlib 图表代码详解: 7.3 动态生成图表示例 2:动态更新图表代码详解&…

Typora激活脚本

参考文章1 图文教程 | 2024Typora最新版免费激活使用教程(新旧版可用)_typora激活-CSDN博客 参考文章2 解决Typora闪退、文件打不开等问题——Typora免费使用教程(也有免费版的)_为什么点击typora没反应-CSDN博客 下面是脚本: …

物联网云平台开发岗位面试经验分享

大家好,这次为大家分享的是关于物联网云平台开发岗位面试,这是一篇关于更加面向项目和技术的面经详解 面试岗位:物联网云平台开发工程师 💼岗位职责: 负责物联网云平台框架搭建、架构规划与设计,以及架构…

网站支持IPv6和不支持有什么区别?

在当今数字化时代,互联网已经成为人们生活和工作中不可或缺的一部分。随着互联网的不断发展,IPv6作为新一代互联网协议,正逐渐被广泛应用。 网站支持IPv6 和不支持IPv6究竟有什么区别呢? 一、IPv6的背景与优势 IPv6是“Interne…

电脑与电脑之间怎么快速传输文件?

若两台电脑在同一局域网,可以使用Windows远程桌面传输文件,或者使用远程看看这款免费的远程桌面软件,它支持在不同的网络之间传输文件,而且速度快、安全性高。 步骤1. 在两台电脑上下载、安装并运行远程看看。 步骤2. 注册一个远…

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs&…

山西的旅游资源那么丰富,为什么很少人去山西旅游呢?

山西作为一个拥有丰富旅游资源的省份,却在游客吸引力方面相对弱于厦门、云南、四川等地,这一现象可以从多个方面来分析。 关于”山西的旅游资源那么丰富,为什么很少人去山西旅游呢?“这个问题,通过以下几点分析&#…

从基础到进阶:直播美颜API集成主播美颜SDK的开发指南

今天,小编将从基础概念开始,详细介绍如何集成直播美颜API,并通过主播美颜SDK实现高级美颜功能,为开发者提供清晰的开发指南。 一、什么是直播美颜API? 直播美颜API是一套接口,允许开发者在直播过程中对视…

如何解析域名到网站?

在现代互联网中,域名解析是用户访问网站的关键过程。用户通过输入易于记忆的域名来访问网站,而背后则是复杂的域名解析机制将域名转换为服务器的IP地址,使得浏览器能够找到并加载目标网站。聚名网详细介绍域名解析的过程及其相关技术。 一、…

shell手册

bash-handbook-zh-CN 目录 前言Shells与模式 交互模式非交互模式返回值 注释变量 局部变量环境变量位置参数 Shell扩展 大括号扩展命令置换算数扩展单引号和双引号 数组 数组声明数组扩展数组切片向数组中添加元素从数组中删除元素 流,管道以及序列 流管道命令序列…