解释程序基本原理

news2024/9/28 13:19:44

解释程序基本原理

  • 1、解释程序的基本结构
  • 2、高级语言编译与解释方式的比较

  语言处理程序是一类系统软件的总称,其主要作用是将高级语言或汇编语言编写的程序翻译成某种机器语言程序,使程序可在计算机上运行。语言处理程序主要分为汇编程序、编译程序和解释程序3种基本类型。本文将着重讲述解释程序的基本原理。
  解释程序是另一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但是在运行用户程序时,它直接执行源程序或源程序的中间表示形式。因此,解释程序不产生源程序的目标程序,这是它和编译程序的主要区别。下图显示了解释程序实现高级语言的 3 种方式。

在这里插入图片描述

  源程序被直接解释执行的处理方式如上图中的标记A 所示。这种解释程序对源程序进行逐个字符的检查,然后执行程序语句规定的动作。例如,如果扫描到符号序列:

    GOTO L

解释程序就开始搜索源程序中标号 L 的定义位置 (即 L 后面紧跟冒号“.”的语句位置)。这类解释程序通过反复扫措源程序来实现程序的运行,运行效率很低。
  解释程序也可以先将源程序翻译成某种中间代码形式,然后对中间代码进行解释来实现用户程序的运行,这种翻译方式如上图中的标记 B 和C 所示。通常,在中间代码和高级语言的语句间存在一一对应的关系。APL 和 SNOBOL4 的很多实现就采用这种方法。解释方式 B 和 C 的不同之处在于中间代码的级别,在方式 C下,解释程序采用的中间代码更接近于机器语言。在这种实现方案中,高级语言和低级中间代码间存在着 1-n 的对应关系。PASCAL-P 解释系统是这类解释程序的一个实例,它在词法分析、语法分析和语义基础上,先将源程序翻译成 P- 代码,再由一个非常简单的解释程序来解释执行这种 P- 代码。这类系统具有比较好的可移植性。

1、解释程序的基本结构

  解释程序通常可以分成两部分: 第一部分是分析部分,包括通常的词法分析、语法分析和语义分析程序,经语义分析后把源程序翻译成中间代码,中间代码常采用逆波兰表示形式。第二部分是解释部分,用来对第一部分产生的中间代码进行解释执行。下面简要介绍第二部分的工作原理。
  设用数组 MEM 模拟计算机的内存,源程序的中间代码和解释部分的各个子程序都存放在数组 MEM 中。全局变量 PC 是一个程序计数器,它记录了当前正在执行的中间代码的位置。这种解释部分的常见结构可以由下面两部分组成。
  (1) PC:=PC+1。
  (2)执行位于 opcode-table[MEM[PC]]的子程序(解释子程序执行后返回到前面)。
  下面用一个简单的例子来说明其工作原理。设两个实型变量 A 和 B 进行相加的中间代码是:

     start : Ipush
          A
        Ipush
         B
        Iaddreal

  其中,中间代码 Ipush 和 Iaddreal 实际上都是 opcode-table 表的索引值 (即位移),而该表的单元中存放的值就是对应的解释子程序的起始地址,A 和 B 都是 MEM 中的索引值。解释部分开始执行时,PC的值为 start-1。

     opcode-table [Ipush]=push
     opcode-table[laddreal]=addreal

  解释部分可表示如下:

     interpreter-loop:   PC:=PC+1;
               goto opcode-table[MEM[PC]];
         push:   PC:=PC+1;
               stackreal(MEM[MEM[PC]]);
               goto interpreter-loop;
         addreal:   stackreal(popreal()+popreal());
               goto interpreter-loop;
    …(其余各解释子程序,此处省略)

  其中,stackreal() 表示把相应值压入栈中,而 popreal() 表示取得栈顶元素值并弹出栈顶元素。上面的代码基于栈实现了将两个数值相加并将结果存入栈中的处理

2、高级语言编译与解释方式的比较

  对于高级语言的编译和解释工作方式,可以从以下几个方面进行比较
  (1)效率。编译比解释方式可能取得更高的效率。
  一般情况下,在解释方式下运行程序时,解释程序可能需要反复扫描源程序。例如,每一次引用变量都要进行类型检查,甚至需要重新进行存储分配,从而降低了程序的运行速度。在空间上,以解释方式运行程序需要更多的内存,因为系统不但需要为用户程序分配运行空间,而且要为解释程序及其支撑系统分配空间。
  在编译方式下,编译程序除了对源程序进行语法和语义分析外,还要生成源程序的目标代码并进行优化,所以这个过程比解释方式需要更多的时间。虽然与仔细写出的机器程序相比,由编译程序创建的目标程序运行的时间一般更长,需要占用的存储空间更多,但源程序只需要被编译程序翻译一次就可以多次运行。因此,总体来讲,编译方式比解释方式可能取得更高的效率。
  (2)灵活性。由于解释程序需要反复检查源程序,这也使得解释方式能够比编译方式更灵活。当解释器直接运行源程序时,“在运行中”修改程序就成为可能,例如增加语句或者修改错误等。另外,当解释器直接在源程序上工作时,它可以对错误进行更精确地定位。
  (3)可移植性。解释器一般也是用某种程序设计语言编写的,因此只要对解释器进行重新编译,就可以使解释器运行在不同的环境中。
  由于编译和解释的方法各有特点,因此现有的一些编译系统既提供编译的方式,也提供解释的方式,甚至将两种方式进行结合。例如,在 Java 虚拟机上发展的一种 compiling-just-in-time新技术,就是在代码第一次运行时进行编译,其后运行时就不再进行编译了。

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

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

相关文章

【详解】结构体的内存对齐(每步配图)

目录 引言: 为什么存在结构体内存对齐? 结构体内存对齐规则: 练习一: 测试代码: 结果如下: 第二个练习:结构体的嵌套问题 测试代码: 代码结果如下: 两个关于结构体的易错…

thinkphp递归实现无限级子分类合并上级children

//设别分类列表public function getCategoryList(){$list = Db::name(categorys)->select(

在vue中实现树形结构的表格,以及对数据结构的处理

需求:有一些告警数据,如果他们的计划编码相同则实现折叠效果,单击某行数据可以进行关闭,状态发生改变,关闭以后按钮禁用。 实现效果:目前所有告警消息都被关闭,如果未被关闭则可以进行关闭 实现…

leetcode 2645. 构造有效字符串的最少插入数-python

题目: 给你一个字符串 word ,你可以向其中任何位置插入 “a”、“b” 或 “c” 任意次,返回使 word 有效 需要插入的最少字母数。 如果字符串可以由 “abc” 串联多次得到,则认为该字符串 有效 。 解题方法 1.先判断字符串是否…

李沐之神经网络基础

目录 1.模型构造 1.1层和块 1.2自定义块 1.3顺序块 1.4在前向传播函数中执行代码 2.参数管理 2.1参数访问 2.2参数初始化 3.自定义层 3.1不带参数的层 3.2带参数的层 4.读写文件 4.1加载和保存张量 4.2加载和保存模型参数 1.模型构造 1.1层和块 import torch fr…

一种具有轨迹优化的无人驾驶车实时运动规划器 论文阅读

论文题目:A Real-Time Motion Planner with Trajectory Optimization for Autonomous Vehicles Abstract 本文的实时规划器首先将空间离散化,然后基于一组成本函数搜索出最佳轨迹。迭代优化所得到的轨迹的Path和Speed。post-optimization计算复杂度低&…

阿里云服务部署docker容器

1.1 为什么要用docker 问题 开发、测试、生产环境不统一,造成项目测试、部署时产生问题 解决方案 使用容器化技术,将环境和项目一起发送给测试、部署人员,测试人数和运维人员直接使用发过 来的环境和项目进行操作,避免环境不统一…

【卡梅德生物】单B细胞技术:牛单抗制备

1.牛单B细胞技术原理 单个B细胞抗体制备技术是近年来新发展的一类快速制备单克隆抗体的技术,基于流式细胞分选技术进行单B细胞单抗制备,利用每个B细胞只含有一个功能性重链可变区DNA序列和一个轻链可变区DNA序列且只产生一种特异性抗体的特性&#xff0c…

嵌入式linux 编译qt5(以v851s为例)

本文参考Blev大神的博客:Yuzuki Lizard V851S开发板 --移植 QT5.12.9教程(群友Blev提供) - Allwinner / 柚木PI-V851S - 嵌入式开发问答社区 (100ask.net) 一. 环境准备 1.下载qt5源码:Open Source Development | Open Source …

MathType绝对是我数学编辑的首选工具!

去年,微软曾说,要去掉Office里的公式编辑器,建议用户使用MathType编辑公式。目前Office用户可以到微软官网安装MathType的插件,现在免费使用,以后要收费。Word里安装这个插件以后,就会出现MathType的菜单。…

双交叉限幅控制总结

空燃比小于等于1使用下图:空燃比大于1,MAX变MIN,MIN变MAX,高低选互换即可。加负荷,先加空气,后加煤气,降负荷,先降煤气,后降空气。 交叉限幅和双交叉限幅的区别 交叉限幅…

磷酸铁锂电池生产污废水需要哪些工艺及设备

磷酸铁锂电池作为一种常见的锂离子电池,已广泛应用于电动汽车、储能系统等领域。然而,在磷酸铁锂电池的生产过程中,难免会产生一定量的污废水。为了有效处理和处理这些污废水,我们需要合适的工艺和设备。 首先,针对磷酸…

java期末复习题

1.任何一个Java程序都默认引入一个包,这个包的名字是________________。 正确答案:java.lang Java程序默认引入的包是java.lang包。这个包是Java语言的核心,它提供了Java中的基础类,包括基本Object类、Class类、String类、基本类…

react 项目结构配置

1 项目整体目录结构的搭建 如下图: 2 重置css样式: normalize.css reset.less ; 第一步 安装 npm i normalize.css 入口文件index.tsx导入:import ‘noremalize.css’ 第二步 创建自己的css样式:在assets文件夹中创建css…

【MySQL】:掌握SQL中DDL的数据库定义与操作

🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. SQL的分类二. DDL数据库操作2.1 查询所有数据库2.2 查询当前数据库2.3 创建数…

分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】

分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】 目录 分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】分类效果基本描述模型描述程序设计参考资料 分…

《设计模式的艺术》笔记 - 简单工厂模式

介绍 定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有相同的父类。因为在简单工厂模式中用于创建实例的方法是静态方法,因此简单工厂模式又被称为静态工厂方法模式,属于类创建型模式 实现 class Pr…

实现JavaScript的函数链式执行

本篇文章将会实现函数链式执行,链式步骤延时等操作。 1.工具类 const executor (name) > {/*** 执行器名称*/const executorName name;/*** 方法数组*/const methodArray [];/*** 同步执行某个方法*/function run(func){methodArray.push(func);return this…

谷歌aab包在Android 14闪退而apk没问题(targetsdk 34)

问题原因 Unity应用(target SDK 34)上线到GooglePlay,有用户反馈fold5设备上(Android14系统)疯狂闪退,经测试,在小米手机Android14系统的版本复现成功了,奇怪的是apk直接安装没问题,而打包成aa…

Android开发基础(二)

Android开发基础(二) 上篇主要描述了Android系统架构,代码是通过Java表示的; 本篇将从介绍Android组件去理解Android开发,代码将对Java和Kotlin进行对比。 Android组件 Android应用程序由一些零散的有联系的组件组成…