编译原理基础概念
一、什么是编译程序
编译程序是一种程序,能够将某一种高级语言编写的源程序改造成另一种低级语言编写的目标程序,他们在逻辑上等价、完成相同的工作

二、编译阶段
1、当目标程序是机器语言时,编译阶段:(1)编译阶段、(2)、执行阶段

当目标程序是汇编语言时,编译阶段:
(1)编译阶段 (2)汇编阶段 (3)执行阶段

三、编译的两种方式
1、编译方式:

此方式特点:书写源程序的高级语言独立于机器
2、解释方式:

四、编译过程的步骤
Example1:
I wish you success
词法分析 :识别出句子中的每一个字符串
语法分析:主 谓 宾 间宾
语义分析:分析句子的含义
中间代码生成:用一种中间语言或内部形式表示的结果
代码优化:修饰工作
目标代码生成:将中间代码翻译成目标程序

词法分析
输入源程序,对组成源程序的字符串从左到右进行扫描,并根据语言的(编写程序的高级语言)的构词(词法)规则识别分解出一个个具有独立意义的字符串(单词),然后按顺序一一输出单词。
单词:关键字(保留字、基本字),标识符,字符,标点符号。
输入:源程序
输出:单词符号序列
Example2:
分析源程序:main(){}
词法分析后的输出:
保留字main
(
)
{
}
2、语法分析
在词法分析:在词法分析的基础上,根据语言(高级语言)的语法规则(文法规则)分析程序的语法结构,把单词符号串分解成各类语法单位,同时判断各种语法成分在语法结构上的正确性。
语法单位:短语、句子、程序端
输入:单词序列
输出:语法分析后的单词序列
Example3:
分析程序: for i :=1 to 100 do i:=i+1;
经词法分析后的输出:for,i,:=,1,to,100,do,i,:=,+,1;
经过语法分析后为:

3、语义分析
根据语法成分的结构分析其含义
(1)类型审查 如C语言中,*MOD☆
若*为int,则☆必为int,否则报错
(2)类型转化 如:sum:=first + count*10
若count为浮点型,则把10也转换为浮点型
词法规则:单词符号的形成规则(如变量名用大写字母)
语法规定:规定如何从单词符号形成语法单位
4、中间代码生成
用一种中间语言或内部形式表示的结果
5、代码优化
对中间代码进行优化处理,使生成的代码更高效
6、目标代码生成
将中间代码翻译成目标程序
五、编译阶段的组合
编译前端:与源语言有关与目标机无关的部分
编译后端:与目标机有关的部分
遍:对源程序或源程序的中间结果从头到尾扫描一次称为一遍
六、编译程序实现的途径

T型图:将源语言S通过用语言H写的编译器翻译成目标语言T
T型图的两种组合方式


七、自展技术
用“滚雪球”的方式生成编译程序
思想:先用目标机的语言书写源程序的一个子集的编译程序,再用这个子集作为语言,实现源语言的编译程序。
八、自动生成技术
LEX自动生成词法分析工具
YACC自动生成语法分析工具
编译的编译
相关文章:
编译原理基础概念
一、什么是编译程序编译程序是一种程序,能够将某一种高级语言编写的源程序改造成另一种低级语言编写的目标程序,他们在逻辑上等价、完成相同的工作二、编译阶段1、当目标程序是机器语言时,编译阶段:(1)编译…...
蔬菜视觉分拣机器人的设计与实现(RoboWork参赛方案)
蔬菜视觉分拣机器人的设计与实现 文章目录蔬菜视觉分拣机器人的设计与实现1. 技术栈背景2. 整体设计3. 机械结构3.1 整体结构3.2 底座结构3.3 小臂结构3.4 大臂结构3.5 负载组件结构3.6 末端执行器结构4. 硬件部分4.1 视觉系统4.1.1 光源4.1.2 海康工业相机4.2 传送带系统4.2.1…...
【LVGL移植】STM32F1基于STM32CubeMX配置硬件SPI驱动1.8寸TFT ST7735S跑LVGL图形demo
【LVGL移植】STM32F1基于STM32CubeMX配置硬件SPI驱动1.8寸TFT ST7735S屏幕跑LVGL图形demo🎬运行LVGL 按键组件demo ✨基于STM32CubeMX配置工程是因为方便移植,只要是STM32芯片,拿到我的这个工程源码就可以根据自己的stm32芯片,自…...
写给20、21级学生的话
写给20、21级学生的话前言一、关于招聘变招生,你怎么看?二、对于即将实习/已经实习的学生,你有什么建议?1.学习方面2.提升方面三、思想成年真的很重要前言 最近,有一些同学遇到的实习问题,我统一回复下&…...
功能测试用例多次录制后,我丢掉了selenium,选择龙测AI-TestOps云平台
目录一、如何使用龙测AI-TestOps云平台1、进入龙测AI-TestOps云平台2、新建项目3、新建流程图4、创建任务5、查看任务状态6、查看报告、图片7、下载流程图、测试报告、excel用例二、龙测AI-TestOps云平台AI功能介绍1、NLP2、视频AI转流程图三、总结功能测试用例多次录制后&…...
【C++知识点】C++20 常用新特性总结
✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:C/C知识点 📣专栏定位:整理一下 C 相关的知识点,供大家学习参考~ ❤️如果有收获的话,欢迎点赞👍…...
数据库体系结构概念--集中式数据库、分布式数据库
数据库模式 前言: 平时我们接触的‘数据库’一般指的是DBMS,数据库管理系统,DBMS是软件如:mysql、oracle、dm等等都是集中式数据库,但它们不能代表整个数据库,只是通过这些软件来管理相应的数据内容&#…...
PyQt5数据库开发2 5.2 QSqlRelationalTableModel
目录 一、Qt窗体设计 1. 新建Qt项目 2. 添加组件 3. 添加资源 4. 添加Action 5. 添加工具栏 6. 添加菜单项 7. 添加退出功能 二、SQL Server下建表插数据 1. 建立表 2. 插入数据 3. 单表数据 4. 联合查询 三、代码实现 1. 新建项目目录 2. 编译窗体文件和资…...
树莓派——智能家居第一步
辛辛苦苦配了成功让树莓派开始工作了,开始搞智能家居!大体思路:基于工厂模式,分模块来实现上图分为三部分:主控、外设、控制主控我采用的是树莓派的4b4G版本,外设包括四个区域的灯(我的和上图有…...
【Golang】Golang基础入门级教程 -- 0基础安装搭建Go语言开发环境
目录 安装和下载GO语言 下载 下载地址 版本的选择 安装 Windows安装 Linux下安装 Mac下安装 检查 GOROOT和GOPATH GOPROXY Go开发编辑器 VS Code介绍 下载与安装 配置 Go扩展 第一个Go程序 Hello World go mod init 编写 编译 VSCode切换默认终端 本篇文章…...
MATLAB | 如何解决实验数据散点图重叠问题(overlap)
本期部分实验效果: 这期讲一下如果数据重合严重该咋办(overlap),事先说明,本文中的绘图均使用一个几行的简单小代码进行了修饰: function defualtAxes axgca;hold on;box on ax.XGridon; ax.YGridon; ax.XMinorTickon; ax.YMinor…...
Kubernetes 一键部署利器:kubeadm
文章目录集群部署痛点kubeadm 的工作原理kubeadm init 的工作流程kubeadm join 的工作流程kubeadm 的部署配置参数集群部署痛点 Kubernetes 的部署一直以来都是挡在初学者前面的一只“拦路虎”。尤其是在 Kubernetes 项目发布初期,它的部署完全要依靠一堆由社区维护…...
[jS 事件循环理解] 主线程 宏任务 微任务 - 执行顺序优先级理解
最近看了一个帖子 事件循环机制-宏任务-微任务 把js单线程中 , 主线程 | 宏任务 | 微任务 的调用顺序讲解的很直白精巧 , 记录一下以供查阅 1.主线程, 可以理解为从上到下顺序执行的一个js线程 2. 宏任务 script / setTimeOut /setInterval等 3. 微任务主要有promise等 4. 热…...
顺序表和链表的比较
这两个结构各有优势,相辅相成。 顺序表: 优点: 1.支持随机访问。 2.CPU高速缓存命中率更高。(物理空间连续) 缺点: 1.头部和中部插入和删除时间效率低(O(n))。 2.连续的物理空间,空间不够后需要增容:…...
Java为什么只能单继承???
目录 先屡清楚继承和实现的区别: 分析原因: 多继承虽然能使子类同时拥有多个父类的特征,但是其缺点也是很显著的,主要有两方面: (1)如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该…...
数据安全-分类分级 调研分析报告
目录 前言一、数据分类分级概述1.数据分类2.数据分级二、数据分类分级原则三、数据分类分级的框架和方法1.数据分类分级的框架2.分类标准分类常见的方法2.1 MECE2.2 线分法和面分法及混合分法2.3 数据主题域2.4 技术选型维度2.5 以业务应用维度2.6 信息安全隐私方面的分类法3.分…...
浏览器对象详解
文章目录浏览器对象详解一、参考资料二、认识浏览器运行态下的 js1.问:是否了解浏览器的执行态(分层设计)?2.BOM1.[location](https://developer.mozilla.org/zh-CN/docs/Web/API/Location)拓展方向:2.[History](https…...
异步电路后端实现流程(cdc signOff 后端做什么)
一种后端异步电路的signOff流程同步电路和异步电路分别signOff对于同步电路,后端会分析sta setup/hold,这里不在赘述。在该scenario下 异步电路是不会分析,也不会关注异步电路之间的走线在cdc scenario(mode)下sdc有一下设置:将所…...
Linux网络编程实战介绍
文章目录 前言一、Linux网络编程介绍二、文章目录总结前言 本专栏将为大家讲解Linux网络编程的知识,本专栏只需要有C语言基础即可学习,学习本专栏将大大提高你的C语言水平,当然了我也还会在ARM板子上进行实验将Linux驱动也和网络编程联系起来,方便大家去实现自己的项目。我…...
C++概述 课堂笔记
函数的重载在C语言中函数名是唯一的,不可以重复定义,当我们利用函数执行,功能相似的函数,我们也不能使用同一个函数,比如说,求整型的函数,不能用来求浮点型、字符型。在C中引入函数重载的概念&a…...
WindowResizer:突破Windows窗口限制的精准尺寸控制工具
WindowResizer:突破Windows窗口限制的精准尺寸控制工具 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 在Windows桌面环境中,应用程序窗口尺寸管理是影响工…...
163MusicLyrics:免费音乐歌词提取终极指南,轻松获取网易云与QQ音乐歌词
163MusicLyrics:免费音乐歌词提取终极指南,轻松获取网易云与QQ音乐歌词 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 还在为找不到准确的音乐歌…...
Cursor编辑器集成Claude 3:AI双模型编程实战与成本优化指南
1. 项目概述:当AI代码助手遇上你的IDE 最近在开发者圈子里,一个名为“Cursor-Claude-Extension”的开源项目热度持续攀升。简单来说,它是一款为Cursor编辑器设计的扩展插件,核心功能是将Anthropic公司强大的Claude系列模型&#x…...
运维实战:ESXi主机物理网卡闪断致部分VM网络中断的排查与应急恢复
1. 故障现象与初步判断 那天凌晨2点15分,值班手机突然响起刺耳的告警声。监控系统显示,ESXi主机上的三台关键业务虚拟机网络连接中断,而其他虚拟机却运行正常。这种部分VM断网的情况立刻引起了我的警觉——这通常意味着问题出在物理层而非虚拟…...
PyTorch模型保存加载避坑指南:从state_dict到checkpoint,这5种场景你都会了吗?
PyTorch模型保存加载避坑指南:从state_dict到checkpoint,这5种场景你都会了吗? 在深度学习项目的实际开发中,模型保存与加载看似简单,却隐藏着无数"坑点"。我曾见过团队因一个错误的map_location参数导致生…...
CAJ转PDF终极指南:3步告别知网格式限制,实现跨平台学术自由
CAJ转PDF终极指南:3步告别知网格式限制,实现跨平台学术自由 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换,成功与否,皆是玄学。 项目地址: https:…...
Python爬虫实战:手把手教你如何采集软件文档“弃用功能”清单!
㊗️本期内容已收录至专栏《Python爬虫实战》,持续完善知识体系与项目实战,建议先订阅收藏,后续查阅更方便~ ㊙️本期爬虫难度指数:⭐⭐ (中级) 🉐福利: 一次订阅后,专栏内的所有文章…...
终极指南:如何使用Chrome插件markdownReader提升Markdown阅读体验
终极指南:如何使用Chrome插件markdownReader提升Markdown阅读体验 【免费下载链接】markdownReader markdownReader is a extention for chrome, used for reading markdown file. 项目地址: https://gitcode.com/gh_mirrors/ma/markdownReader 还在为浏览器…...
AI编程协作实战:从提示工程到全周期开发工作流
1. 项目概述:从零开始的AI编程启蒙最近在GitHub上看到一个挺有意思的项目,叫jnMetaCode/ai-coding-101。光看名字,你大概能猜到它和AI编程有关,但“101”这个后缀又暗示着它的入门属性。作为一个在代码堆里摸爬滚打多年的老码农&a…...
从‘代码打架’到‘和谐共舞’:用Gogs实战演练多人Git协作全流程(附冲突解决脚本)
从‘代码打架’到‘和谐共舞’:用Gogs实战演练多人Git协作全流程(附冲突解决脚本) 在团队开发中,Git冲突就像两个程序员同时修改同一行代码时的"拳脚相加",而解决冲突的过程则是让代码重新"和谐共舞&q…...
