编译原理(静态语义分析)

2023-11-18


语法制导翻译

语义分析的作用

  1. 检查结构正确的句子表达的意思是否正确
  2. 执行规定的语义动作

中间代码简介


后缀式

逆波兰式,a+bc的后缀式表示为abc+操作符紧跟在操作数的后面


三地址码

三地址码式不超过三个地址组成的一个运算,他与汇编指令在结构上十分接近,从三地址码生成目标代码比较容易,因此作为中间代码

三地址码的实现借助三元式和四元式

三元式的表示为
(op,arg1,arg2)
它表示的计算为:=arg1 op arg2
例如表达式x:=a+bc用一组三元式表示的结果为
(1)(
,b,c)
(2)(+,a,(1))
(3)(:=,x,(2))

四元式的表示为
(op,arg1,arg2,result)
四元式的意义在于用result临时存储运算结果,方便语法制导翻译时引入临时变量

如何从树到三地址码?或者从三地址码到树?


符号表

符号表用于存放声明的变量,比如int x;符号表中存储的不仅仅是变量的名字,还有变量的类型,作用域,符号表会为这样的x建立两个条目int x;struct x{double y,z};


声明语句的翻译


数组元素的引用

如何计算某个n维数组元素的地址?

a-cw+vw

在这里插入图片描述
其中a是首地址,w是每个元素占用的存储单元,二维数组下,d在按行存储时是i1的最大值,按列存储时是i2的最大值


例题

在这里插入图片描述
根据二维数组元素的地址计算公式arr+[(2-1) × 4+(3-1)] ×d=arr+6d


数组元素引用的语法制导翻译

中间代码生成的好处主要有两点:一是便于编译程序的开发和移植; 二是便于对代码进行优化处理。 特点:便于语法制导翻译;既与机器指令的结构相近, 又与具体机器无关。


布尔表达式

布尔表达式的计算可以采用数值表示的直接计算和逻辑表示的短路计算两种方式


拉链与回填

拉链-回填技术是语法制导翻译过程中使用的一种基本技术,其基本思想是当三地址码中的转向不确定时,将所有转向同一地址的三地址码拉成一个链,而一旦所转向的地址被确定,则为此链上所有的三地址码回填入此地址

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译原理(静态语义分析) 的相关文章

  • Sqli-labs之Less-28和Less-28a

    Less 28 基于错误的 单引号字符型 过滤了union和select等的注入 判断注入类型 1和1 正常回显 1 报错 单引号字符型 2 26 26 1 1回显为id 1 有小括号 参看源码 发现没有过滤or与and 过滤了相连的uni
  • vuforia for unity 入门教程

    一 配置vuforia环境 与 运行简单AR程序 1 安装unity2017 1 从官网上下载unity2017下载器 2 运行下载器勾选上vuforiasupport选项 其余不变 点击开始安装 2 创建AR项目与配置AR运行环境 1 打

随机推荐

  • KITTI数据集介绍

    KITTI数据集 7481 training images and point clouds and 7518 test images and point clouds 采集平台 1惯性导航系统 GPS IMU OXTS RT 3003 1
  • Python基础教程(入门教程),30分钟玩转Python编程!

    这是一篇针对初学者的 Python 基础教程 只要你认真阅读 花费 30 分钟即可快速了解 Python 这篇 Python 入门教程讲解的知识点包括 Python 编程环境的搭建 Python 基本操作入门 Python 数据类型 Pyt
  • bit、Byte、bps、Bps、pps、Gbps的单位详细说明及换算

    bit Byte bps Bps pps Gbps的单位详细说明及换算 bit 电脑记忆体中最小的单位 在二进位电脑系统中 每一bit 可以代表0 或 1 的数位讯号 Byte 字节单位 一般表示存储介质大小的单位 一个B 常用大写的B来表
  • 为什么uzi排到古手羽就秒_为什么uzi排到古手羽就秒退看一下直播间里的弹幕就清楚了!...

    为什么uzi排到古手羽就秒退 看一下直播间里的弹幕就清楚了 百度APP游戏年度票选活动 前言 12月24号英雄联盟电竞圈快讯 12月份的电竞圈显得有点冷清 不过龙百万仍然会带来每天的精彩快讯 和召唤师们聊聊天 谈谈心 刚出道就遭受巨大压力的
  • 【总结】MySQL1

    MySQL 1 关系型数据库 1 1 特点 理论基础 关系代数 集合论 一阶逻辑 关系运算 具体表象 用二维表装数据 表 table entity relation 列 column field attribute 行 row record
  • 认识Java虚拟机中的类加载子系统和执行引擎

    目录 一 JVM整体架构 二 JVM类装载子系统 一 类加载过程 二 类加载器 三 类加载机制 1 全盘负责委托机制 2 双亲委派机制 Parents Delegation Model
  • XMT.com超200万被区块链终端交易

    链客 专为开发者而生 有问必答 此文章来自区块链技术社区 未经允许拒绝转载 狭义来讲 区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构 并以密码学方式保证的不可篡改和不可伪造的分布式账本 当下 区块链俨然成为炙手可
  • c语言基础(一)——预处理详解

    目录 1 预处理是什么 2 预定义符号 3 define标识符 3 1 define 定义标识符 3 2 define定义宏 命名约定 3 3 宏的题目 4 和 4 1 的作用 4 2 的作用 5 带副作用的宏参数 6 宏与函数的对比 7
  • Nomad系列-Nomad网络模式

    系列文章 Nomad 系列文章 概述 Nomad 的网络和 Docker 的也有很大不同 和 K8s 的有很大不同 另外 Nomad 不同版本 Nomad 1 3 版本前后 或是否集成 Consul 及 CNI 等不同组件也会导致网络模式各
  • python中多进程(multiprocessing)

    python中多进程 multiprocessing 一 multiprocessing中使用子进程概念 from multiprocessing import Process 可以通过Process来构造一个子进程 p Process t
  • USB匹配电阻

    做过USB的人都或许有一个纠结 那就是D 和D 上到底要串多大的电阻 串在源端还是终端 我想说 网络上的说法都不完全正确 首先USB有低速 全速和高速之分 在低速和全速模式下是电压驱动的 驱动电压为3 3V 但在高速模式下是电流驱动的 驱动
  • 计算机组成原理期末复习【超实用】

    计算机组成原理 第二版 唐朔飞 编著 课本有些地方还不错 可以下载电子版看看 b站2小时讲解链接 https www bilibili com video BV1x4411q7Fz 初次录讲解视频 各种差错和画音不同步请各位谅解 我录到后面
  • Qt常用数据类型

    常用数据类型 1 常用基本数据类型 常用接口 求绝对值 T是泛型 以下都是 T qAbs const T t 最大值和最小值 会把最大或最小的返回出来 T qMax const T value1 const T value2 T qMin
  • 解决笔记本电脑(i)某个键的字母按不出来

    前两天清理电脑键盘没有关机然后清理了一下键盘 再使用的时候就打不出 i 字母了 重启也没用 看网上说 使用Fn F11 可以 但是可能每个电脑配置不同 使用失败 最后 想了想F11 不行 最后试试F12吧 最后Fn F11 成功解锁 哈哈哈
  • ffmpeg通过命令拉udp的rtsp流的方法

    ffmpeg用命令拉流是非常简单易用的 特别是对这种常见的摄像头的流 rtsp 10 1 21 121 554 profile1 稍微复杂一点 rtsp admin a1234567 10 1 21 121 554 cam realmoni
  • 【sqli-labs】 less5 GET - Double Injection - Single Quotes - String (双注入GET单引号字符型注入)...

    双注入查询可以查看这两篇介绍 https www 2cto com article 201302 190763 html https www 2cto com article 201303 192718 html 简而言之就是构造如下的查询
  • 相关性和因果性

    一 如果A和B相关 有至少五种可能性 1 A导致B 2 B导致A 3 C导致A和B 4 A和B互为因果 5 小样本引起的巧合 二 相关是线性关性 非线性的因果关系对应的相关性可能会减弱或消失 统计上A和B具有线性 或者非线性 关系 通常代表
  • AccessibilityEvent常用详解

    AccessibilityEvent常用详解 本文是作者在使用android的AccessibilityService时记录使用到的AccessibilityEvent的一些情况 如有错误欢迎指正 dinjet foxmail com 屏幕
  • C++(VS基础操作)基础操作

    VS的基本操作 1 创建项目在起始页中选择 2 创建文件夹 CPP Project 起文件名称 3 起项目名称 CPPLesson01 4 解决方案 一个解决方案能存放多个项目 一个项目只能选择一个解决方案 5 创建空项目 6 c 使用开发
  • 编译原理(静态语义分析)

    文章目录 语法制导翻译 中间代码简介 后缀式 三地址码 符号表 声明语句的翻译 数组元素的引用 例题 数组元素引用的语法制导翻译 布尔表达式 拉链与回填 语法制导翻译 语义分析的作用 检查结构正确的句子表达的意思是否正确 执行规定的语义动作