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

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

编译器概述

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领域的顶级认证之一,其价值和意义不言而喻。 那么,…

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

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

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

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

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

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

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

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

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

若两台电脑在同一局域网,可以使用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是一套接口,允许开发者在直播过程中对视…

别找了!包含gpt在内的国内可以使用的Ai网站都在这了【最新可用】

在当今人工智能迅速发展的时代,智能创作与对话平台为用户提供了多样化的功能支持。以下是一些国内代表性的GPT平台,涵盖了从个人到企业的广泛需求,您可以根据自己的需求灵活选择。我们还为您整理了这些平台的链接,方便直接体验。&…

Redis学习Day3——项目工程开发

扩展阅读推荐: 黑马程序员Redis入门到实战教程_哔哩哔哩_bilibili 使用git命令行将本地仓库代码上传到gitee/github远程仓库-CSDN博客 一、项目介绍及其初始化 学习Redis的过程,我们还将遇到各种实际问题,例如缓存击穿、雪崩、热Key等问题&…

Ubuntu20.04+ros-noetic配置Cartographer

一、概述 因为要配置激光SLAM,Cartographer属于激光雷达SLAM 中比较经典的一款,在学习之前先将其在Ubuntu20.04首先配置出来并成功运行demo。 二、具体操作 (一)概述 使用平台是Windows的wsl2上的Ubuntu20.04子系统,…

如何看待IBM中国研发部裁员?

如何看待IBM中国研发部裁员?近日,IBM中国宣布撤出在华两大研发中心,引发了IT行业对于跨国公司在华研发战略的广泛讨论。这一决定不仅影响了众多IT从业者的职业发展,也让人思考全球化背景下中国IT产业的竞争力和未来发展方向。面对…

Java+vue的医药进出口交易系统(源码+数据库+文档)

外贸系统|医药进出口交易系统 目录 基于Javavue的服装定制系统 一、前言 二、系统设计 三、系统功能设计 仓储部门功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设…

中国书法——孙溟㠭浅析碑帖《三希堂法帖》

孙溟㠭浅析碑帖《三希堂法帖》 全称是《三希堂石渠宝笈法帖》,是中国清代宫廷刻帖,一共三十二册。 清朝高宗弘历收藏了晋王羲之《快雪时晴帖》,王献之的《中秋帖》,王珣的《伯远帖》三种王氏原墨迹。故而把所藏法书之所…

农产品管理与推荐系统Python+Django网页界面+计算机毕设项目+推荐算法

一、介绍 农产品管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的…

2024年9月10日嵌入式学习

今日主要学习了缓冲帧。 Framebuffer(帧缓冲)是Linux系统为显示设备提供的一套应用程序接口,它将显存抽象为一种设备,允许上层应用程序在图形模式下直接进行显示缓冲区的读写操作。 原理:通过内存映射技术向显存空间…

MM-PhyQA——一个专门处理高中物理选择题的 LLM 聊天机器人

概述 论文地址:https://arxiv.org/abs/2404.12926 人工智能的发展正在改变我们的学习方式。特别是使用大规模语言模型(LLM)的聊天机器人,通过提供个性化指导和即时反馈,极大地拓展了教育的可能性。 然而&#xff0c…