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

编译原理笔记(1)绪论

文章目录

    • 1.什么是编译
    • 2.编译系统的结构
    • 3.词法分析概述
    • 4.语法分析概述
    • 5.语义分析概述
    • 6.中间代码生成和后端概述

1.什么是编译

编译的定义:将高级语言翻译成汇编语言或机器语言的过程。前者称为源语言,后者称为目标语言。

高级语言源程序的处理过程

在这里插入图片描述

预处理器的功能

  • 把存储在不同文件中的源程序聚合在一起。
  • 把被称为宏的缩写语句转换为原始语句。

可重定位的定义:在内存中存放的起始地址不是固定的,代码中的绝对地址是由起始位置和相对地址相加获得的。

加载器的作用

  • 修改可重定位地址;
  • 将修改后的指令和数据放到内存中的合适位置处。

链接的定义:将可重定位的目标文件与其他可重定位的目标程序以及库文件连接。

链接器的作用

  • 将多个可重定位的机器代码文件和库文件连接到一起。
  • 解决外部内存地址问题。

2.编译系统的结构

编译的各个阶段

在这里插入图片描述

  • 分析部分:也被称为编译器前端,是从词法分析器到中间代码生成器的部分。该部分只与源语言相关。
  • 综合部分:也被称为编译器后端,包括目标代码生成器和机器相关代码优化器。该部分只与目标语言相关。

备注:在实际实现中,编译的各个阶段可能会整合在一起。如语义分析器常常和中间代码生成器放在一起。

语义制导翻译的概念:在分析语法规则时结合语义规则进行语义分析。这样,语法分析、语义分析和中间代码生成可以放在一起实现。

3.词法分析概述

词法分析的主要任务

  • 从左到右逐行扫描源程序的字符,识别出各个单词,确定单词的类型。
  • 将识别出的单词转换为统一的机内表示——词法单元(token)形式。

词法单元token介绍

  • 构成方式:是一个二元组,表示为<种别码,属性值>
  • 区分方法:首先通过种别码区分不同的词语,如果种别码相同则通过属性值区分。如果种别码为一词一码,则该词语的词法单元就无需属性值。

单词类型的分类

在这里插入图片描述

  • 关键字:所有不同的关键字都对应唯一一个种别码。
  • 标识符:所有不同的标识符共享同一个种别码。
  • 常量:不同类型的常量对应的种别码不同;相同类型的常量使用同一个种别码。
  • 运算符和界限符:不同的运算符和界限符都对应唯一一个种别码(有时一类运算符共享同一个种别码)。

4.语法分析概述

语法分析的主要任务:从词法分析器输出的token序列中识别出各类短语,并构造语法分析树。

5.语义分析概述

语义分析包括对声明语句的分析和语义检查两个方面。

声明语句的分析:程序中的语句可以分为声明语句和可执行语句两种,语义分析需要对声明语句进行分析,来收集标识符的属性信息。

  • 种属:表示一个标识符是简单变量,还是数组、记录等复杂变量,又或者是一个过程。
  • 类型:标识符所表示的数据类型。
  • 存储位置和长度
  • 值和作用域
  • 参数和返回值信息

符号表概述

  • 符号表作用:用于存放标识符的属性信息的数据结构。
  • 字符串表:符号表中常带有一个字符串表,用于存放程序中用到的标识符和字符常数。

语言检查:审查源程序有无语义错误,常见的语义错误如下:

  • 变量或过程未声明就使用;
  • 变量或过程名重复声明;
  • 运算分量类型不匹配。
  • 操作符与操作数之间的类型不匹配。

6.中间代码生成和后端概述

常见的中间表示形式:三地址码、语法结构树(也被称为语法树)。

三地址码概述

  • 结构组成:由类似于汇编语言的指令序列组成;
  • 操作数个数限制:每个指令最多有三个操作数。
  • 常见的三地址指令
    在这里插入图片描述

四元式概述

  • 四元式的作用:四元式用于表示一条三地址指令。
  • 四元式的内容:元组中的第一个元素为操作符,后面三个分量为指令的操作数(但是不一定有三个操作数,因此可以空着)。

目标代码生成

  • 生成过程:目标代码以源程序的中间表示形式作为输入,并把它映射到目标语言。
  • 重要任务:为程序中使用的变量合理分配寄存器。

代码优化

  • 代码优化的作用:代码优化是为了改进代码所进行的等价程序变换,使得其运行得更快一些或占用的空间更少一些,又或者两者兼顾。
  • 代码优化方式分类:机器无关优化和机器相关优化。前者是在中间代码层面进行优化,后者在目标代码层面进行优化。

相关文章:

编译原理笔记(1)绪论

文章目录1.什么是编译2.编译系统的结构3.词法分析概述4.语法分析概述5.语义分析概述6.中间代码生成和后端概述1.什么是编译 编译的定义&#xff1a;将高级语言翻译成汇编语言或机器语言的过程。前者称为源语言&#xff0c;后者称为目标语言。 高级语言源程序的处理过程&#…...

MySQL(八)

服务器参数设置 general datadir/var/lib/mysql 数据文件存放的目录socket/var/lib/mysql/mysql.sock mysql.socket表示server和client在同一台服务器&#xff0c;并且使用localhost进行连接&#xff0c;就会使用socket进行连接pid_file/var/lib/mysql/mysql.pid 存储mysql的p…...

steam搬砖项目,小投入高回报,可放大操作,(内附教学资料)

我必须要说&#xff0c;steam搬砖项目就是全网门槛最低的副业&#xff0c;有手就行&#xff01; 本人90后底层员工一枚&#xff0c;新入csgo搬砖项目&#xff0c;轻松翻身 什么做抖音、海外问卷、直播卖货&#xff0c;电商等等对比我这个都是小钱。我这个方法是利用了大部分人…...

华为OD机试真题Python实现【最多提取子串数目】真题+解题思路+代码(20222023)

最多提取子串数目 题目 给定由 [a-z] 26 个英文小写字母组成的字符串 A 和 B,其中 A 中可能存在重复字母,B 中不会存在重复字母 现从字符串 A 中按规则挑选一些字母,可以组成字符串 B。 挑选规则如下: 1) 同一个位置的字母只能被挑选一次 2) 被挑选字母的相对先后顺序不…...

day32 多线程(上)

文章目录相关概念codeThreadTest01ThreadTest02 编写一个类&#xff0c;直接继承java.lang.Thread&#xff0c;重写run方法ThreadTest03 实现线程的第二种方法ThreadTest04 采用匿名内部类的方式ThreadTest05 获取线程名字ThreadTest06 sleep方法sleep面试题ThreadTest08 终止线…...

【flink】 各种join类型对比

表定义 动态表(dynamic table)&#xff1a;动态表是流的另一种表达方式&#xff0c;动态表作为一个逻辑的抽象概念&#xff0c;使我们更容易理解flink中将streaming发展到table这个层次的设计&#xff0c;本质都是对无边界、持续变更数据的表示形式&#xff0c;所以动态表与流之…...

常用正则表达式

一、校验数字的表达式 数字&#xff1a;^[0-9]*$ n位的数字&#xff1a;^\d{n}$ 至少n位的数字&#xff1a;^\d{n,}$ m-n位的数字&#xff1a;^\d{m,n}$ 零和非零开头的数字&#xff1a;^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字&#xff1a;^([1-9][0-9]*)(.[0…...

PMP考试有没有什么技巧可以介绍一下么?

一、试题形式 ——中英文对照 即每道题都是一遍英文&#xff0c;一遍翻译的中文&#xff0c;在审题的时候有一些小的技巧需要注意。首先如果你的英文水平足够好&#xff0c;建议直接阅读原文。PMP试题毕竟是美国人出的&#xff0c;语言的组织、思想的表达&#xff0c;肯定更符…...

2022-2023年营销报告(B站平台) | 5大行业势态、流量大盘全景洞察

一直以来&#xff0c;手持高活跃、高粘性用户群体的B站是行业用来观察年轻人消费习惯的重要平台。以至于用户群体的不断壮大带动了B站的商业价值。如今B站的商业舞台越来越大&#xff0c;不断地向外界招手&#xff0c;欢迎更多品牌积极加入到这个千万年轻人聚集的内容社区。为了…...

Python的异常与工具包

异常 当检测到一个错误时&#xff0c;python解释器就无法继续执行了&#xff0c;反而出现了一些错误的提示&#xff0c;这就是所谓的异常。 捕获异常 世界上没有完美的程序&#xff0c;任何程序在运行的过程中&#xff0c;都有可能出现异常&#xff0c;导致程序无法完美运行…...

基于SSM的婴幼儿商城

基于SSM的婴幼儿商城 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; …...

2023年新能源汽车行业研究报告

第一章 行业概况 新能源汽车&#xff0c;是指采用新型动力系统&#xff0c;完全或者主要依靠新型能源驱动的汽车&#xff0c;包括纯电动汽车、插电式混合动力汽车、增程式混合动力汽车和燃料电池汽车等。国际上&#xff0c;混合动力汽车&#xff08;含中混、强混、插电式混动&…...

手写Promise方法(直击Promise A+规范)

前言&#xff1a;大家好&#xff0c;我是前端獭子。高效优雅是我的创作方式。学习是一个渐进的过程&#xff0c;要把知识串联起来才能解决某一方面的问题。 Promise 构造函数 我们先来写 Promise 构造函数的属性和值&#xff0c;以及处理new Promise()时会传入的两个回调函数。…...

GooglePlay SSL Error Handler

应用上架GooglePlay 收到邮件提示 出现这个原因是因为我在app中使用webview加载Https的H5界面&#xff0c;在onReceivedSslError()中处理SslErrorHandler时&#xff0c;出现白屏现象&#xff0c;原因是webview默认在加载有证书验证的url时&#xff0c;会默认使用handler.cancel…...

OpenStack手动分布式部署Keystone【Queens版】

目录 Keystone简介 1、登录数据库配置&#xff08;在controller执行&#xff09; 1.1登录数据库 1.2数据库里创建keystone 1.3授权对keystone数据库的正确访问 1.4退出数据库 2、数据库导入Keystone表&#xff08;在controller执行&#xff09; 2.1安装httpd mod_wsgi 2.2备…...

AAPT2

概念 AAPT2(Android 资源打包工具)是一种构建工具,Android Studio 和 Android Gradle 插件使用它来编译和打包应用的资源。AAPT2 会解析资源、为资源编制索引,并将资源编译为针对 Android 平台进行过优化的二进制格式。 Android Gradle 插件 3.0.0 及更高版本在默认情况下…...

kafka学习

概念&#xff1a; broker: 1台服务器的kafka进程&#xff0c;它是kafka的工作者。类似Hbase的regionServer&#xff0c;hdfs的Datanodetopic: 订阅发布模式的kafka中有消息主题producer&#xff1a;生产者customer&#xff1a;消费者 基础架构&#xff1a; 元数据&#xff1a…...

坐拥两条黄金赛道,爱博医疗未来必是星辰大海!

尽管2022年疫情反复&#xff0c;但爱博医疗仍交出了亮眼的“答卷”。图源&#xff1a;爱博医疗2023年2月14日晚间&#xff0c;爱博医疗披露了2022年度业绩快报&#xff0c;营收5.79亿元&#xff0c;同比增长33.81%&#xff1b;归母净利润2.32亿元&#xff0c;同比增长35.27%&am…...

DEV C++的使用入门程序做算术运算

DEV C Dev-C &#xff08;有时候也称为 Dev-Cpp&#xff09;是一个免费软件&#xff0c;最早是由 BloodShed 公司开发的&#xff0c;在版本 4.9.2 之后该公司停止开发并开放源代码。然后由 Orwell 接手进行维护&#xff0c;陆续开发了几个版本&#xff0c;后来也有其他开发人员…...

华为OD机试真题Python实现【商人买卖】真题+解题思路+代码(20222023)

商人买卖 题目 商人经营一家店铺,有number种商品, 由于仓库限制每件商品的最大持有数量是item[index] 每种商品的价格是item-price[item_index][day] 通过对商品的买进和卖出获取利润 请给出商人在days天内能获取的最大的利润 注:同一件商品可以反复买进和卖出 🔥🔥�…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...