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

【从零开始学习计算机科学】编译原理(一)编译过程概述

【从零开始学习计算机科学】编译原理(一)编译过程概述

  • 绪论
    • 编译过程概述
    • 词法分析
    • 语法分析
    • 代码优化
    • 代码生成
    • 其他功能
    • 编译器的前端和后端

绪论

什么叫编译程序?为什么我们需要编译程序?编译程序就是一个程序,将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序,翻译成与之等价的另一种能为计算机解读、运行的低级机器语言。

一般来说,执行一个高级语言所写的程序的方法有两种,分别是编译执行和解释执行。编译执行有一个单独的编译过程将源程序翻译生成目标程序,具体执行的是目标程序,因此是一次编译多次执行。例子包括C、C++等编程语言。解释执行在每次运行时,将源程序边翻译边运行,因此每次执行都需要解释。例子包括Python、JavaScript、Matlab等编程语言。其共同点是将高级语言翻译(编译)成机器语言进行执行

编译过程概述

编译程序的工作,从输入源程序开始,到输出目标程序结束,与自然语言之间的翻译有很多相似之处。

英译中 (如I love China.) 需经历的步骤主要有:1,识别出句子中的单词;2,分析句子的语法结构;3,句子的语义分析;4,对语义进行修饰;5,写出最后的译文。而在编译过程中,其可以抽象为词法分析、语法分析、语义分析及中间代码生成、机器无关的代码优化、目标代码生成。因此,编译器是分阶段执行的,每个阶段将源程序从一种表示转换成另一种表示

在这里插入图片描述

词法分析

此阶段完成的任务(以a=

相关文章:

【从零开始学习计算机科学】编译原理(一)编译过程概述

【从零开始学习计算机科学】编译原理(一)编译过程概述 绪论编译过程概述词法分析语法分析代码优化代码生成其他功能编译器的前端和后端绪论 什么叫编译程序?为什么我们需要编译程序?编译程序就是一个程序,将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序,翻…...

PCL 点云AABB包围盒(二)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 包围盒是一种求解离散点集最优包围空间的算法,基本思想是用体积稍大且特性简单的几何体(称为包围盒)来近似地代替复杂的几何对象。(来源于百度)常用的求解包围盒的算法主要有AABB和OOB算法,其中AABB的算法思想…...

【算法day8】 Z 字形变换 -O(n)算法思路整理

Z 字形变换,算法思路整理 https://leetcode.cn/problems/zigzag-conversion/description/ 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下…...

L3-1 夺宝大赛

输入样例 1: 5 7 1 1 1 1 1 0 1 1 1 1 1 1 0 0 1 1 0 2 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 7 1 5 7 1 1 1 5 5 3 1 3 5 1 4输出样例 1: 7 6样例 1 说明: 七支队伍到达大本营的时间顺次为:7、不可能、5、3、3、5、6&#xff0c…...

Matlab:矩阵运算篇——矩阵

目录 1.定义 实例——创建矩阵 实例——创建复数矩阵 2.矩阵的生成 实例——M文件矩阵 2.利用文本创建 实例——创建生活用品矩阵 3.创建特殊矩阵 实例——生成特殊矩阵 4.矩阵元素的运算 1.矩阵元素的修改 实例——新矩阵的生成 2.矩阵的变维 实例——矩阵维度修…...

泛微ecode的页面开发发送请求参数携带集合

1.在开发过程中我们难免遇见会存在需要将集合传递到后端的情况,那么这里就有一些如下的注意事项,如以下代码: // 新增action.boundasync addQuestion(formData) {var theList this.questionAnswerList;var questionAnswerListArray new Ar…...

【结构光相机的精度极限】

1. 光源波长((\lambda)) 光源波长是决定结构光相机精度极限的核心因素之一。根据光学衍射极限理论,光的波长越短,能够分辨的细节越小,精度越高。 理论依据: 根据瑞利判据(Rayleigh Criterion&…...

Javaweb后端全局异常处理器

类名随便定义 这是异常处理的方法exceptionhandler responsebody作用,方法的响应值返回给前端,如果返回的是集合对象,会把集合对象转为json,再给前端响应返回...

SpringBoot缓存抽象:@Cacheable与缓存管理器配置

文章目录 引言一、SpringBoot缓存抽象概述二、Cacheable注解详解2.1 Cacheable的关键属性 三、缓存管理器配置四、自定义键生成策略五、缓存同步与失效策略六、SpringBoot缓存最佳实践总结 引言 缓存是提升应用性能的关键技术,SpringBoot提供了强大的缓存抽象层&am…...

下载文件,文件名乱码问题

C# .net framework 4.8 mvc 项目,做一个文件下载功能。 原项目是前端使用razor引擎方式做页面渲染的。 该项目原来就有一个模块是可供文件下载的,且文件名是中文。 但是我现在新增的这个模块,领导要求用js写,觉得razor太笨重。 …...

深入理解Linux进程管理:从基础到高级操作指南

1. 进程的定义、组成和环境 什么是进程? 想象你的电脑是一个大工厂,进程就是工厂里正在运行的机器。每个机器(进程)都有自己的任务,比如一台机器负责打印文件,另一台负责播放音乐。 进程的组成&#xff1…...

DOM与CSS:网页设计的核心力量

DOM与CSS:网页设计的核心力量 引言 在网页设计中,DOM(文档对象模型)与CSS(层叠样式表)是两个不可或缺的组成部分。它们共同构成了现代网页的骨架与外衣。本文将深入探讨DOM与CSS的关系、作用以及如何有效地运用它们来提升网页设计质量。 DOM:网页内容的结构化表示 什…...

深入解析pnpm与npm:颠覆传统包管理的技术革命与应用实践

深入解析pnpm与npm:颠覆传统包管理的技术革命与应用实践 引言:被node_modules支配的恐惧 "你的node_modules有多大?"这个灵魂拷问总能引发开发者会心一笑。当项目规模达到500MB时,npm install需要喝三杯咖啡的时间&am…...

OpenSSL 的主要功能及其示例命令

OpenSSL 是一个功能强大的开源工具包,用于处理各种与加密相关的任务,包括生成密钥、创建证书、加密解密数据、验证证书等。以下是 OpenSSL 的主要功能及其示例命令。 1.生成密钥 1.1 生成 RSA 私钥 openssl genrsa -out private_key.pem 2048• 说明&a…...

江科大51单片机笔记【11】AT24C02(I2C总线)

一、存储器 1.介绍 RAM的特点是存储速度特别快,但是掉电会丢失;ROM的特点是存储速度特别慢,但是掉电不会丢失 SRAM是所有存储器最快的,一般用于电脑的CPU高速缓存,容量相对较少,成本较高;DRAM…...

html css 笔记

01_浏览器相关知识 五大主流浏览器: Chrome Safari IE Firefox Opera (拥有自己的内核) 四大内核: webkit Trident Gecko blink. 02_网页相关知识 构成 网址 网站 网页 网页标准: 结构 表现 行为 分别对应 HTML CSS JavaScript 03_HTML简介 H…...

【一句话经验】ubuntu vi/vim 模式自动设置为paste

从centos过来,发现ubutun有些地方不习惯,尤其是vi的粘贴,默认自动进去了代码模式,导致每次粘贴必须得set paste,否则会出现问题。 解决办法非常简单,按照下面命令执行即可: cd ~ echo "…...

外层元素旋转,其包括在内的子元素一并旋转(不改变旋转中心),单元测试

思路&#xff1a;外层旋转后坐标&#xff0c;元素旋转后坐标&#xff0c;计算偏移坐标 <template><div class"outbox"><label>角度: <input v-model.number"rotate" type"number" /></label><br><div c…...

Docker容器安装软件(完整版)

文章目录 一、安装Docker1.1 docker 相关的命令1.2 配置镜像加速 二. 安装es2.1 创建网络2.2 拉取镜像2.3 创建挂载点目录2.4 部署单点es&#xff0c;创建es容器2.5 编写elasticsearch.yml2.6 重启es容器2.7 测试Elasticsearch是否安装成功 三. 基于Docker安装Kibana3.1 拉取镜…...

「 机器人 」扑翼飞行器通过总气动力控制四自由度运动方法

一、前言 在扑翼飞行中,总气动力(Total Aerodynamic Force)是指扑翼在运动过程中受到的所有空气动力作用的合力。它是由以下两种主要力的合成结果: 1. 升力(Lift, ):垂直于空气流方向的力,用于支持飞行器(或生物)的重量。 2. 阻力(Drag, ):平行于空气流方向的力,…...

Axios简单说明,快速上手

Ajax&#xff1a;异步的JavaScript和XML 作用&#xff1a; 数据交换异步交互 Axios&#xff1a;就是对原生Ajax进行封装&#xff0c;简化书写&#xff0c;快速开发 使用逻辑&#xff1a; 首先要安装Axios&#xff0c;可以通过npm在项目中安装&#xff1a; 打开命令行工具…...

云服务器安装宝塔面板部署

单机部署(前端vue项目) 服务器安装宝塔面板 连接到服务器 使用 SSH 连接到你的服务器&#xff1a; ssh rootip安装宝塔面板 运行以下命令来安装宝塔面板&#xff1a; yum install -y wget wget -O install.sh http://download.bt.cn/install/install_6.0.sh sh install.sh安…...

Python 编程题 第九节:二分查找、移动0、旋转字符串、判断子序列

二分查找 双指针查找 无重复数字 lst[1,15,24,36,78,92,101] nint(input()) def binary_search(n,lst):left 0right len(lst) - 1while left<right:mid(leftright)//2if lst[mid]n:return midelif lst[mid]<n:leftmid1elif lst[mid]>n:rightmid-1return -1 print…...

docker-compose部署MongoDB分片集群

前言 MongoDB 使用 keyFile 进行 节点间身份验证,我们需要先创建一个 keyFile 并确保所有副本集的节点使用相同的 keyFile。 openssl rand -base64 756 > mongo-keyfile chmod 400 mongo-keyfiledocker-compose部署分片集群 无密码方式 # docker-compose-mongodb.yml s…...

通义万相 2.1:AIGC 领域的 “王炸” 组合如何颠覆创作生态?

引言 在数字化和人工智能的飞速发展中&#xff0c;AIGC&#xff08;AI生成内容&#xff09;技术已经成为推动创作、设计和内容生成领域创新的核心力量。而当通义万相2.1与蓝耘智算平台强强联手&#xff0c;这一“王炸”组合不仅提升了AIGC的效率&#xff0c;还为创作生态带来了…...

elementPlus之日历扩展功能

在这里做个记录&#xff0c;感觉用得还挺多的 功能有如下&#xff1a; 切换月份按钮对应日历视图和中间日期都要变选择日期日历视图要变点击日历视图中的不属于当前选中月份的日期即可触发日历视图变化以及中间日期也要变 代码如下&#xff1a; <template><div clas…...

C# NX二次开发:获取模型中所有表达式并且更新某个表达式的值

大家好&#xff0c;今天要讲的是关于NX中表达式的相关UFUN函数。 UF_MODL_ask_exps_of_part (view source) tag_tpart_tagInputTag of the part to be queriedint *number_of_expsOutputNumber of expressions returnedtag_t * *expsOutput to UF_*free*All the expressions i…...

Ollama本地部署deepseek-r1蒸馏版

Docker安装Ollama 拉取镜像 docker pull ollama/ollama​ 启动-使用GPU docker run -d --gpusall -p 11434:11434 --name ollama ollama/ollamadocker run : Docker 的核心命令&#xff0c;用于创建并启动一个新的容器。 -d : 后台模式&#xff08;detached mode&#xff09…...

计算机毕业设计:基于web的乡村旅游系统

基于web的乡村旅游系统mysql数据库创建语句基于web的乡村旅游系统oracle数据库创建语句基于web的乡村旅游系统sqlserver数据库创建语句基于web的乡村旅游系统springspringMVChibernate框架对象(javaBean,pojo)设计基于web的乡村旅游系统springspringMVCmybatis框架对象(javaBea…...

c#面试题整理9

1.遍历xml文档 2.解释一下这段 String s new String("xyz"); 这段在C#平台中&#xff0c;编译失败 3.说明一下抽象类 抽象类可以有构造函数 抽象类不能是静态和密封的类&#xff0c;密封的类表示无法继承&#xff0c;抽象类本身就不可实例化&#xff0c;加不好…...