【编译原理--- 汇编、编译、解释系统】

news2024/11/17 22:25:14

汇编、编译、解释系统

1.编译方式和解释方式

程序种类是否生成目标程序是否参与程序的运行过程程序执行速度可移植性
编译程序生成不参与
解释程序不生成参与

编译方式过程:词法分析、语法分析、语义分析、(中间代码生成、代码优化、)目标代码生成。

解释方式过程:词法分析、语法分析、语义分析。

  • 编译器和解释器都不可省略词法分析、语法分析、语义分析且顺序不可交换。

  • 即词法分析、语法分析、语义分析是必须的。

  • 编译器方式中中间代码生成和代码优化不是必要,可省略。

  • 即编译器方式可以在词法分析、语法分析、语义分析阶段后直接生成目标代码。

2.编译方式具体过程

(1)词法分析

输入:源程序

输出:记号流

词法分析阶段的主要作用是:分析构成程序的字符及由字符按照构造规则构成的符号,是否符合程序语言的规定。

(2)语法分析

输入:记号流

输出:语法树(分析树)

语法分析阶段可以发现程序中所有的语法错误。包括确定变量是否定义声明。

语法分析阶段的主要作用是:对各条语句的结构进行合法性分析,分析程序中的句子结构是否正确。(例如括号不匹配)

(3)语义分析

输入:语法树(分析树)

语义分析阶段的主要作用是进行类型分析和检查。

语义分析阶段不能发现程序中所有的语义错误。

语义分析阶段可以发现静态语义错误,不能发现动态语义错误,动态语义错误运行时才能发现(除数为0时只能在运行阶段检查出来)

(4)中间代码生成

常见的中间代码有:后缀式、三地址码、三元式、四元式和树(图)等形式。

中间代码与具体的机器无关(不依赖具体的机器),可以将不同的高级程序语言翻译成同一种中间代码。

中间代码可以跨平台。

因为与具体的机器无关,使用中间代码有利于进行与机器无关的优化处理提高编译程序的可移植性

(5)代码优化

(6)目标代码生成

目标代码生成阶段的工作与具体的机器密切相关。

寄存器的分配工作处于目标代码生成阶段。

目标程序完全独立于源程序。

3.其他

符号表

不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中。

记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成。

反编译

编译是将高级语言源程序翻译成机器语言程序(汇编形式或机器代码形式),反编译是编译的逆过程。反编译通常不能把可执行文件还原成高级语言源代码,只能转化成功能上等价的汇编程序。

编译过程地址分配

编译过程为变量分配存储单元所用的地址是逻辑地址,程序运行时再映射为物理地址

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

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

相关文章

重生奇迹MU格斗家上手最轻松的职业

重生奇迹MU格斗家玩法攻略,有一个比较奇葩的职业,那就是格斗家。格斗家拥有其他职业没有的优势,就是加体力和敏捷都可以提升攻击力百分比。格斗家玩法攻略 目前格斗家最多的就是敏格玩法,配合智力MM加成后的幽冥光速拳可以说是第…

修改VSCode中md文件中上传图片的路径

vs上打开md上传一个图片默认的路径是当前文件夹,可以发现,图片一多,非常的乱。 我们希望的是在单独的一个文件中存放图片即可。 使用ctrl , 快捷键,输入markdown 添加一个新的key/value。 **/*.md assets/${documentBaseName}/…

抖音运营_如何做好抖音直播

目录 如何做好抖音直播 一 带货主播应具备的技能 1 专业技能 2 语言表达能力 3 场控应变技能 4 熟悉平台规则 二 选品技巧 1 选择与账号属性相关的产品 2 选择试用过的产品 3 选择热销产品 4 选择低客单价产品 三 直播间产品的管理 四 打造转化率高的直播间 1 突出…

探秘SpringBoot默认线程池:了解其运行原理与工作方式(@Async和ThreadPoolTaskExecutor)

文章目录 文章导图Spring封装的几种线程池SpringBoot默认线程池TaskExecutionAutoConfiguration(SpringBoot 2.1后)主要作用优势使用场景如果没有它 2.1版本以后如何查看参数方式一:通过Async注解--采用ThreadPoolTaskExecutordetermineAsync…

Jenkins 构建 Maven 项目:构建服务器和部署服务器分离的情况

bash内容 #!/bin/bash#删除历史数据 rm -rf ruoyi-admin.jar# appname$1 appnamevideo.xxxxx.com #获取传入的参数 echo "arg:$appname"#获取正在运行的jar包pid # pidps -ef | grep $1 | grep java -jar | awk {printf $2} pidps -ef | grep $appname | grep java …

C# 深拷贝和浅拷贝

文章目录 1.深拷贝2.浅拷贝3.拷贝类4.浅拷贝的实现5.深拷贝实现5.1 浅拷贝对象,对引用类型重新一个个赋值5.2 反射实现5.3 利用XML序列化和反序列化实现 1.深拷贝 拷贝一个对象时,不仅仅把对象的引用进行复制,还把该对象引用的值也一起拷贝。…

聊聊ChatGPT的本质

这是鼎叔的第九十八篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。 阶段性总结下我对ChatGPT的基础理解,算是一篇学习思考笔记吧。其中难免有很多不准确的,或过于简略的地方,将来再迭代学习。 OpenAI做ChatGPT的底层逻辑…

mfc140.dll丢失原因和mfc140.dll丢失修复办法分享

mfc140.dll是与微软基础类库(Microsoft Foundation Classes, MFC)紧密相关的动态链接库(DLL)文件。MFC是微软为C开发者设计的一个应用程序框架,用于简化Windows应用程序的开发工作。以下是mfc140.dll文件的一些关键属性…

spring boot 整合j2cache 项目启动警告 Redis mode [null] not defined. Using ‘single‘

好 之前的文章 spring boot 整合j2cache 基础操作 在spring boot环境中整合了 j2cache 我们 项目启动时 日志会有一个关键信息 Redis的模式 没有定义 默认使用 single Redis 的这个模式有四种 大家可以自己去网上找一下 做个了解 不用很纠结 我们直接在 j2cache.properties …

医院门诊互联电子病历|基于SSM+vue的医院门诊互联电子病历管理信息系统的设计与实现(源码+数据库+文档)

医院门诊互联电子病历管理信息系统 目录 基于SSM+vue的医院门诊互联电子病历管理信息系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2后台登录模块 5.2.1管理员功能 5.2.2用户功能 5.2.3医生功能 四、数据库设计 五、核心代码…

requests_html使用介绍

文章目录 一、requests_html 基本介绍二、requests_html 基本使用三、发送带有参数的请求四、图片抓取实战案例 一、requests_html 基本介绍 A、装库: pip install requests_html B、介绍: requests 和 requests_html 是同一个作者 二、requests_html 基本使用 A、导包: fro…

辐射度技术在AI去衣中的魅力与科学

引言: 在当今的数字化时代,人工智能正逐渐渗透到我们生活的方方面面。其中,AI去衣技术作为一项颇具争议但又不失其科技创新的应用,正引起越来越多的关注和讨论。而在实现高质量图像渲染的过程中,辐射度技术凭借其卓越的…

Linux指令初识

ls:显示当前目录底下的指定文件或目录 ls -l更详细的信息 ls -a显示当前目录下的所有文件 命令中的选项可以一次传递多个 ,例如:ls -al 命令和选项有必须一个或多个空格 以.开头的文件,为隐藏文件ls -a可以看到,ls -l看不见 支持命令拼在一起&#…

Rust开源Web框架Salvo源码编译

1.克隆源码: https://github.com/salvo-rs/salvo.git 2.进入salve目录并运行cargo build编译 编译成功 3.编译生成的库 4.安装salve-cli git clone --recursive https://github.com/salvo-rs/salvo-cli.git 编译salve-cli

stm32-PWM输出比较配置

配置流程 1.RCC开启时钟 2.时钟源选择和配置时基单元 这一部分上一篇有写,可以参考一下上一篇的内容,此处不多赘述了。 原文链接:https://blog.csdn.net/m0_74246768/article/details/139048136 3.配置输出比较单…

链表类型的无界阻塞线程安全队列-ConcurrentLinkedQueue(FIFO)

ConcurrentLinkedQueue是非阻塞线程安全(volatile不能完全保证线程安全)的队列,适用于“高并发”的场景。是一个基于链表节点的无界线程安全队列,按照 FIFO(先进先出,尾先进头先出)原则对元素进行排序。队列元素中不可以放置null元素(内部实现的特殊节点除外)。 volati…

【WEEK13】 【DAY5】Shiro第五部分【中文版】

2024.5.24 Friday 接上文【WEEK13】 【DAY4】Shiro第四部分【中文版】 目录 15.7.Shiro请求授权的实现15.7.1.修改ShiroConfig.java15.7.1.1.添加一行验证授权的代码15.7.1.2.重启 15.7.2.修改MyController.java15.7.3.修改ShiroConfig.java15.7.4.重启15.7.5.修改UserRealm.ja…

风电机组的振动控制

文章目录 0. 背景1. 原文记录 0. 背景 混塔机组的频率大概是目前业内遇见的比较普遍的通病。最近在了解风电机组振动控制的知识,看到一篇科普性质的文章,感觉不错,所以记录下来。想要看原文的点击这里。感谢原作者。 1. 原文记录

在IDEA中配置servlet(maven配置完成的基础下)

在IDEA中配置servlet&#xff08;maven配置完成的基础下&#xff09; 1.先新建一个项目 2.选择尾巴是webapp的&#xff0c;名称自定义 3.点击高级设置&#xff0c;修改组id 点击创建&#xff0c;等待jar包下载完成。在pom.xml中配置以下 <dependency><groupId>ja…

【C++算法】BFS解决拓扑排序问题相关经典算法题

1.铺垫概念 ⭐有向无环图&#xff08;DAG图&#xff09; 有向无环图是一种特殊的图数据结构。在这样的图中&#xff0c;节点之间通过有向边连接&#xff0c;表示从一个节点到另一个节点的单向关系&#xff0c;并且不存在任何形式的环路&#xff0c;即没有路径可以让你从一个节…