编译原理期末复习

语义分析和中间代码生成

语义检查: 主要进行一致性检查和越界检查。
一致性检查: (1)表达式中操作数是否保持类型一致;
             (2)赋值语句的左右两边是否类型一致;
             (3)形、实参数类型是否一致;
             (4)数组元素与数组说明是否一致。 

越界检查:数组下标是否越界;子界类型是否越界等等。  
语义处理: 对说明语句:登记信息
          对可执行语句:生成中间代码

语法制导翻译:在语法分析过程中,根据每个产生式对应的语义子程序(语义动作)进行翻译(生成中间代码)的方法称为语法制导翻译。

语义检查和语义处理核心是生成相应的中间代码

中间代码

四元式形式: (op,ARG1,ARG2,RESULT)
    op—运算符
    ARG1—第一运算量
    ARG2—第二运算量
    RESULT—结果

简单赋值语句的翻译

entry(i):语义函数,查符号表,返回变量i的入口。

gen(OP,ARG1,ARG2,RESULT):语义过程,生成一个四元式(OP,ARG1,ARG2,RESULT),并填入四元式表中。同时ip:=ip+1
A→i:=E   
   {     
         P=entry(i.NAME);
         If(P!=0) 
              gen ( :=, E.place, _, P)
         Else error();   
   }
举例: a:=-b*(c+d)的移进-归约过程

类型转换指令(itr,x,_,t)

说明语句的翻译

不产生可执行指令,仅负责填表,将被说明对象的类型及相对存储位置记入各自的符号表中

(1)offset:相对位移量,初值为0,是一个全局变量
(2)T.type:数据类型
(3)T.width:数据宽度
(4)enter:语义过程,将变量名及其类型和相对存储位置记入符号表中。(写入之后offset增加)
赋初值:Offset=0 

增值:Offset=Offset+T.Width
D→D;D│i:T
T→real│integer│array[num] of T1│↑T1

控制语句的翻译

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于PID的定速巡航控制系统设计【MATLAB/SIMULINK】

摘要: 本文详细介绍了定速巡航控制是一种车辆驾驶辅助系统,它能让驾驶者在高速或长途驾驶时,设定一个固定的车速,然后车辆会自动维持这个速度行驶,无需驾驶者持续踩油门。这大大减轻了驾驶者的疲劳,同时也…

【Ubuntu双系统】两块硬盘分别安装系统,一块硬盘安装Ubuntu 一块安装Windows

【Ubuntu双系统】两块硬盘分别安装双系统,一块硬盘安装Ubuntu 一块安装Windows 前言安装Ubuntu前置操作安装过程参考文献 前言 机器情况:两块1T的硬盘,其中一块已安装Windows 11现需在另一块硬盘上安装Ubuntu,该硬盘还未初始化Ub…

使用 PyInstaller 将 Python 代码打包成独立可执行文件

大家好,当你完成了一段精彩的 Python 代码,你可能会想要与其他人分享它。但是,你可能担心其他人是否拥有足够的环境来运行你的代码。或者,你可能希望保护你的源代码,以防止他人查看或修改它。在这种情况下,…

Perl 语言入门学习

一、介绍 Perl 是一种高级的、动态的、解释型的通用编程语言,由Larry Wall于1987年开发。它是一种非常灵活和强大的语言,广泛用于文本处理、系统管理、网络编程、图形编程等领域。 Perl 语言的设计理念是“用一种简单的语法,去解决复杂的编…

Linux时间子系统2: clock_gettime的VDSO机制分析

在之前分析clock_gettime的文章中接触到了VDSO,本篇文章是对VDSO的学习总结,借鉴了很多前人的经验。 1. 什么是VDSO vDSO:virtual DSO(Dynamic Shared Object),虚拟动态共享库,内核向用户态提供了一个虚拟的动态共享库。在 Linux …

Django之文件上传(二)

一、自定义上传文件重命名 重名名好处: 重命名文件也可以避免文件名冲突的问题可以根据自己情况,针对性增加描述信息1.1、生成文件名方法 import os from uuid import uuid4 # 生成文件的名称 def generate_filename(filename):# filename: 上传文件的名称ext = os.path.spl…

【perl】基本语法 /备忘录/

分享 perl 语言学习资源 Perl 教程|极客教程 (geek-docs.com) Perl [zh] (runebook.dev) Perl 运算符 | 菜鸟教程 (runoob.com) Perl Documentation - Perldoc Browser Search the CPAN - metacpan.org 当然还有一些经典书籍,不再列举。 1、数字 1.1、数字表…

TCPListen客户端和TCPListen服务器

创建项目 TCPListen服务器 public Form1() {InitializeComponent();//TcpListener 搭建tcp服务器的类,基于socket套接字通信的//1创建服务器对象TcpListener server new TcpListener(IPAddress.Parse("192.168.107.83"), 3000);//2 开启服务器 设置最大…

Docker配置 之 本地仓库web访问

介绍 Docker是一种开源的应用容器引擎。 Docker可以让开发者打包应用以及依赖包到一个可移植的容器中,然后发布到任何安装了Docker引擎的服务器上(包括Linux机器、Windows机器),也可以实现虚拟化。容器是完全使用沙箱机制&#…

[Alogithm][动态规划][背包问题][组合总和IV][不同的二叉搜索树]详细讲解

目录 1.组合总和 Ⅳ1.题目链接2.算法原理详解3.代码实现 2.不同的二叉搜索树1.题目链接2.算法原理详解3.代码实现 1.组合总和 Ⅳ 1.题目链接 组合总和 Ⅳ 2.算法原理详解 本题是个排列题,而并非组合题,所以并非背包问题 思路: 确定状态表示…

【小白向】MAC端VSCode C++环境配置(超干货、超详细)

提示:使用环境为 MAC(M2) 其实 VSCode 很早就下载好了,但是因为在配置过程中总是遇到很多坑,搁置了很久,回头捡起遇到报 Error 还是两眼抓瞎,到处翻 blog。为了减少以后的遇坑可能性&#xff0c…

高能氧化锌电阻片加速老化试验曲线和老化机理%生产测试过程

氧化锌压敏电阻片加速老化的试验方法和得到的试验结果不尽相同。在老化机理的研究中一般可以用加速老化试验时功率损耗随时间的变化来衡量老化性能。分析我们的以及大量国外研究者的试验结果,可以将阀片功率损耗随时间变化的特性大致分为三种不司的类型: 类型1:阀片本身的性能…

SQL 截取函数

目录 1、substring 2、left 3、right 4、substring_index 1、substring 用途:字段截取从指定开始的字符开始,截取要的数;指定开始的字符数字可以用负的,指定开始的字符从后往前(向左)数,截取要的数不能为负。 语…

【吊打面试官系列-Mysql面试题】锁的优化策略有哪些?

大家好,我是锋哥。今天分享关于 【锁的优化策略有哪些?】面试题,希望对大家有帮助; 锁的优化策略有哪些? 1、读写分离 2、分段加锁 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 3、减少锁持有的时间 4.多个线程尽量以相同的…

ultralytics框架讲解

ultralytics简介 Ultralytics是一个开源的计算机视觉和深度学习框架,旨在简化训练、评估和部署视觉模型的过程。该框架提供了一系列流行的视觉模型,包括YOLOv5、YOLOv4、YOLOv3、YOLOv3-tiny、YOLOv5-tiny、EfficientDet、PAN、PP-YOLO等,并提…

[数据集][目标检测]胸部解剖检测数据集VOC+YOLO格式100张10类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):100 标注数量(xml文件个数):100 标注数量(txt文件个数):100 标注类别…

【git基本使用】

git 暂未更新,敬请期待! vscode 切换其他远程分支 在开发过程中,其他成员在git上新建一个分支在vscode上找不到,如下截图vscode里除了自己的分支就是master的分支。 解决方案: 这时候我们就需要在vscode的终端敲出…

Java | Leetcode Java题解之第148题排序链表

题目: 题解: class Solution {public ListNode sortList(ListNode head) {if (head null) {return head;}int length 0;ListNode node head;while (node ! null) {length;node node.next;}ListNode dummyHead new ListNode(0, head);for (int subL…

【blender特效】卡通火焰

核心思想就是通过多个不同缩放尺寸的沃罗诺伊叠加,分别构成火焰的大型,中型和小型(形状),最后通过自发光纹理实现火焰加亮。 用的是ev渲染,完全可以把噪音贴图都烘焙出来,自己改改shader就可以扔…