解释程序基本原理

这篇具有很好参考价值的文章主要介绍了解释程序基本原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


  语言处理程序是一类系统软件的总称,其主要作用是将高级语言或汇编语言编写的程序翻译成某种机器语言程序,使程序可在计算机上运行。语言处理程序主要分为汇编程序、编译程序和解释程序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新技术,就是在代码第一次运行时进行编译,其后运行时就不再进行编译了。文章来源地址https://www.toymoban.com/news/detail-787973.html

到了这里,关于解释程序基本原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解释程序基本原理

      语言处理程序是一类系统软件的总称,其主要作用是将高级语言或汇编语言编写的程序翻译成某种机器语言程序,使程序可在计算机上运行。语言处理程序主要分为汇编程序、编译程序和解释程序3种基本类型。本文将着重讲述解释程序的基本原理。   解释程序是另一

    2024年02月02日
    浏览(40)
  • 【软件设计师07】程序设计语言与语言处理程序基础

    编译与解释、文法、正规式、有限自动机、表达式、传值与传址、多中程序语言特点 (逐渐降低考察比例,很少考察) 概念 文法类型 语法推导树 有限自动机 与正规式(重点) 常见问题:给一个串比如01、10、001等,看图中起点到终点能否连起来得到这样的串 正规式 是有限自

    2023年04月08日
    浏览(61)
  • 第三章-Java的基本程序设计结构

      3.1一个简单的Java语言程序  这是程序虽然很简单,但是所有的Java程序都具有这种结构,因此还是值得花一些时间来研究的。首先,Java区分大小写。如果出现了大小写拼写错误(例如:将main拼写成Main),程序将无法运行。 下面逐行的查看这段源代码。pubilc称为访问修

    2024年02月03日
    浏览(51)
  • Java语言程序设计课程设计

    Java语言程序设计课程设计 一、 java语言程序设计课程设计要求: (1)java语言课程设计软件设计要求 1.题目不做严格限定,可自行选择题目来完成。 2.模块化程序设计 3.锯齿型书写格式 4.必须上机调试通过 (2)撰写课程设计报告,内容包括: 1.课程设计题目; 2.需求分析;

    2024年02月08日
    浏览(45)
  • 【高级程序设计语言C++】特殊类设计

    拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 用C++11的话,可以使用特殊的语法来实现一个不能被拷贝的类。在C++11中,可以使用删除函数(deleted function)来禁用拷

    2024年02月10日
    浏览(51)
  • C语言程序设计——设计一个学生管理系统(完美运行的程序(●‘◡‘●))

    通过c语言设计一个学生管理系统,要求有直观的主菜单,可以录入学生的信息,实现添加学生信息、显示学生信息、查找学生信息、删除学生信息、修改学生信息以及退出等功能。 1、首先因为学生有以下几个基本信息:姓名、年龄、学号、性别,依次由name、age、id和sex来表

    2024年02月08日
    浏览(48)
  • 嵌入式开发—矩阵键盘原理及程序设计

    矩阵键盘很好理解,就是排布类似矩阵的按键,大家可以想一下点阵的外形。大概长下面这个样子 矩阵键盘一般应用在需要用到大量按键的场景,主要是为了节省按键使用的IO资源。比如一个项目需要用到16个按键,如果使用普通的独立按键,每一个按键都需要一个IO,16个按

    2024年02月05日
    浏览(53)
  • 南京邮电大学汇编语言程序设计实验二(用户登录验证程序的设计)

    1.掌握循环程序的编写以及结束循环的方法。 2.掌握DOS、BIOS功能调用的使用方法。 用户登录验证程序的实现 程序执行后,给出提示操作,请用户键入用户名和密码;用户在键入密码时,程序不回显键入字符;只有当用户键入的用户名,密码字符串和程序内定的字符串相同时

    2023年04月18日
    浏览(57)
  • 头歌:《C语言程序设计编程实践任务》循环结构程序设计 教学团队:祁文青

    任务:求1000以内所有的水仙花数。若一个 3 位整数的各位数字的立方之和等于这个整数,称之为“水仙花数”。 注: 前面题目写过,取余可以提取刀整数的末尾数字,只要逐步提取出来判断就行。 不能改变x的值(如x10),否则循环一直无法达到x1000,会陷入死循环。 任务:输

    2024年02月05日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包