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

news2024/9/26 3:29:27

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

编译器概述

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.coloradmin.cn/o/2125934.html

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

相关文章

day19JS-AJAX

1. 什么是AJAX 原生生js中有两种通信,一个ajax,还有一个是fetch。 AJAX 并不是编程语言,是一种从网页访问 Web 服务器的技术。AJAX 代表异步 JavaScript 和 XML。 AJAX 使用浏览器内建的 XMLHttpRequest 对象从 web 服务器请求数据&#xff0…

RTR_Chapter_3

第三章 图形处理单元 在历史上,图形加速首先开始于三角形上的像素扫描线颜色插值,并在屏幕上显示这些颜色值。它包括访问图像数据的能力,这允许将纹理运用在表面上;添加用于插值和深度测试的硬件,这提供了内置的可见性…

Java学习Day41:骑龙救!(springMVC)

springMVC与sevlet都是对应表现层web的,但是越复杂的项目使用SpringMVC越方便 基于Java实现MVC模型的轻量级web框架 目标: 小案例: 1.导入依赖 spring-context: 提供 Spring 框架的核心功能,如依赖注入、事件发布和其他应用上…

R语言数据整理和分析(1)

跟着顶刊学习数据分析。本期参考文献《Trends in Dietary Vitamin A Intake Among US Adults by Race and Ethnicity, 2003-2018》,来源于JAMA,IF63.1。 该文研究:2003-2018年美国成年人按种族和民族划分的膳食维生素A摄入量趋势 方法学&am…

集成学习(Ensembling Learning)

0. 来源 概念比较全,可以作为目录,前置知识讲得好,其他一般。 01.内容简介_哔哩哔哩_bilibili01.内容简介是集成学习:XGBoost, lightGBM的第1集视频,该合集共计19集,视频收藏或关注UP主,及时了…

换个角度看PCIE发展史

讲点废话 按照我的习惯,在开始做一件事情之前,我倾向于介绍我做这个事情的思路和原因。因为往往误解就是从我们思考问题的方式开始的,我觉得交代清楚了我做事情的背景,那么你就可以顺着我的思路来思考,这个过程中也很…

【第29章】Spring Cloud之Sentinel规则

文章目录 前言一、规则的种类1. 流量控制规则 (FlowRule)2. 熔断降级规则 (DegradeRule)3. 系统保护规则 (SystemRule)4. 访问控制规则 (AuthorityRule)5. 热点规则 (ParamFlowRule)6.规则常量(RuleConstant) 二、查询更改规则1.查询规则(类型)2.查询规则(所有) 三、规则文件总…

Java预备知识 Day2

1.IDEA的简单使用与介绍 1.1 IDEA的项目工程介绍 Day2_0904:项目名称 E:\0_code\Day2_0904:表示当前项目所在路径 .idea:idea软件自动生成的文件夹,最好不要动 src:srcsourse→源,我们的源代码就放在这…

3.js - 着色器设置点材质(螺旋星系特效)

上图 着色器设置点材质时,在顶点着色器中,最好设置gl_PointSize,不然看不到你在页面中添加的点 main.js import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControlsimport gsap from gsapimp…

FIDAVL:基于视觉语言模型的假图像检测与归因 !

FIDAVL:基于视觉语言模型的假图像检测与归因 ! 这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 作者提出了FIDAVL:使用视觉语言模型进行虚假图像检测。FIDAVL是一…

基于 ROS 的Terraform托管服务轻松部署Qwen-VL-Chat

介绍 Qwen-VL是阿里云研发的大规模视觉语言模型(Large Vision Language Model)。Qwen-VL可以以图像、文本、检测框作为输入,并以文本和检测框作为输出。在Qwen-VL的基础上,利用对齐机制打造出基于大语言模型的视觉AI助手Qwen-VL-…

什么是嵌入式?行业前景如何?

目录 什么是嵌入式? 主要特点 常见应用场景 1. 工业自动化 2. 交通运输 3. 智能家居 4. 消费电子 5. 医疗设备 6. 航空航天 7. 物联网(IoT) 8. 能源管理 行业前景如何? 市场需求强劲 物联网(IoT)的爆发 汽车…

vue3的基本使用(步骤,架构模式,调试工具,指令)

1.基本使用步骤 a.导入vue.js的script脚本文件&#xff08;自动为window对象挂载vue构造函数&#xff09; b.在页面中声明一个将要被vue控制的Dom区域 c.创建vue实例对象 <body><div id"app">{{msg}}</div> </body> </html> <s…

树形弹窗选择框/vue2/Element/弹框选择

前言 此类选择器根据vueelementUI实现&#xff0c;使用vue3的可以根据此案例稍作改动即可实现&#xff0c;主要功能有弹出选择、搜索过滤、搜索结果高亮等&#xff0c;此选择器只支持单选&#xff0c;如需多选可在此基础进行改造。 效果图 代码实现 使用时&#xff0c;props-…

文件备份的方法有哪些?应该怎么弄?分享六个高效便捷的电脑文件备份方法

我们的电脑中存储了大量重要文件&#xff0c;如照片、文档、视频以及重要资料等。 然而&#xff0c;面对突如其来的硬件故障、病毒攻击或人为误操作&#xff0c;这些数据仿佛都悬于一线。 虽然说可以选择的恢复方法有很多&#xff0c;但是没有任何一个方法可以做到100%的&…

【Mysql】记录sql在执行过程中很慢

在改之前的测试脚本,之前写了一些sql,这次准备顺手把sql也调整一下,因为虽然sql能用&#xff0c;但是写的十分拉跨 附sql 分析过程: 1. 初步推测慢主要是因为left join了好几张表。 然后我去查了也跟开发求证过sql在执行过程中是"先联表&#xff0c;再执行查询条件"…

SCADA|KingSCADA运行报错:加载网络服务失败

哈喽,你好啊,我是雷工! 今天要运行KingSCADA程序时报错:加载 网络服务失败 ,导致无法运行。 解决问题思路及过程记录如下: 01 问题描述 如下图所示,报加载 网络服务失败 ; 02 处理过程 软件运行信息窗口中会有详细的运行信息,可以先查看软件的信息窗口。 也可以在日…

bluez SPP使用

然后退出bluetoothctl&#xff0c;执行rfcomm listen /dev/rfcomm0 1&#xff0c;如果已被使用&#xff0c;则执行rfcomm release 0(执行该命令会有数据回显&#xff0c;既手机收到开发板发来的相同数据&#xff0c;若要关闭回显需要加上参数-r&#xff0c;开启raw mode) 手机上…

项目中常用注解整理

Mybatis/MybatisPlus TableName //用来将指定的数据库表和 JavaBean 进行映射TableId(type IdType.AUTO) //标记为数据库中的主键TableField(existfalse) //标记为数据库中不存在的字段&#xff0c;防止报错Paramparam标签提供了对某个函数的参数的各项说明&#xff0c;包括参…