编译原理—语义分析、语法制导翻译、翻译模式、数组元素的翻译、中间代码生成

本文主要是介绍编译原理—语义分析、语法制导翻译、翻译模式、数组元素的翻译、中间代码生成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

编译原理—语义分析、语法制导翻译、翻译模式、数组元素的翻译、中间代码生成

  • 语法制导翻译
    • 语法制导定义(属性文法)
    • 翻译模式
      • 后缀式
      • 图示表示法
      • 构建表达式的语法树
  • 中间代码的种类
    • 三地址码
    • 四地址码
    • 对比
    • 举例
  • 中间代码产生的场景
    • 说明语句的翻译
    • 举例
  • 嵌套说明语句的翻译方案
    • 相关定义
    • 举例
    • 过程嵌套声明
  • 记录的说明
    • 记录说明的翻译
    • 记录域的偏移
    • 举例
  • 赋值语句的翻译
    • 含简单变量的赋值语句的翻译
    • 举例
  • 数组元素的翻译
    • 数组类型的声明
    • 数组元素的地址计算
    • 举例
    • 输入串的分析树
    • 翻译方案
    • 举例

语法制导翻译

  1. L属性文法包含S属性文法

    • S属性:sythesis综合属性
    • L属性:left to right继承属性
    • LL属性一定是LR属性的 ,LL文法一定是LR文法的,可以用LL自顶向下的方法分析L属性文法,L属性文法中有一些是可以自下而上分析的,因此LR不一定能够解决L属性文法,LL可以解决的问题LR不一定能够解决
      在这里插入图片描述
  2. 语法分析中进行静态语义检查和中间代码生成的技术称为语法制导翻译技术;

语法制导定义(属性文法)

  • 引入语法制导定义的目的:
    • 为了将语义属性关联到文法符号:
    • 为了将语义规则关联到产生式:
    • 有效地将语法和语义关联起来。
  1. 为相应的语法成分设置表示语义的属性,属性的值是可以计算的。
  2. 根据属性值计算的关联关系,将其分成综合属性和继承属性;
  3. 根据属性文法中所含的属性将属性文法分成:
    • S-属性文法和L-属性文法;

翻译模式

  • 不仅将语义属性关联到文法符号、将语义规则关联到产生式,而且还通过将语义动作嵌入到产生式的适当位置来表达该语义动作的执行时机。
  • 翻译模式给语义分析的实现提供了更好的支持。
  • 在这里插入图片描述

后缀式

在这里插入图片描述

图示表示法

在这里插入图片描述

构建表达式的语法树

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

中间代码的种类

在这里插入图片描述

三地址码

在这里插入图片描述

四地址码

在这里插入图片描述

对比

在这里插入图片描述

举例

在这里插入图片描述

中间代码产生的场景

在这里插入图片描述

说明语句的翻译

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

举例

在这里插入图片描述
在这里插入图片描述

嵌套说明语句的翻译方案

在这里插入图片描述
在这里插入图片描述

相关定义

在这里插入图片描述

举例

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

过程嵌套声明

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

记录的说明

在这里插入图片描述

记录说明的翻译

在这里插入图片描述

记录域的偏移

在这里插入图片描述
在这里插入图片描述

举例

在这里插入图片描述
在这里插入图片描述

赋值语句的翻译

在这里插入图片描述

含简单变量的赋值语句的翻译

在这里插入图片描述

举例

在这里插入图片描述

在这里插入图片描述

数组元素的翻译

数组类型的声明

在这里插入图片描述

数组元素的地址计算

在这里插入图片描述
在这里插入图片描述

举例

在这里插入图片描述

输入串的分析树

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

翻译方案

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

举例

在这里插入图片描述
在这里插入图片描述

这篇关于编译原理—语义分析、语法制导翻译、翻译模式、数组元素的翻译、中间代码生成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/325243

相关文章

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.