编程实验
解释程序是一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但在运行用户程序时,它直接执行源程序或源程序的内部形式(中间代码)。因此,解释程序并不产生目标程序,这是它和编译程序的主要区别。
工作原理
解释程序由一个总控程序和若干个执行子程序组成。解释程序的工作过程如下:首先,由总控程序执行初始准备工作,置工作初态;然后,从源程序中取一个语句S,并进行语法检查。如果语法有错,则输出错误信息;否则,根据所确定的语句类型转去执行相应的执行子程序。返回后检查解释工作是否完成,如果未完成,则继续解释下一语句;否则,进行必要的善后处理工作。
组成模块
解释程序的一般结构可以分为解释模块和运行模块两个主要模块。前者的职能是按源程序动态执行顺序逐个输入语句,并对单个语句进行分析和解释,包括语法和语义的正确性检验、生成等价的中间代码或机器语言代码,以及错误信息提供等处理。后者的职能是运行语句的翻译代码,并输出中间结果或最终结果。由于解释程序的设计思想不同,运行模块的执行方式也不同。一种方法是解释模块直接生成源程序语句等价的机器语言代码;通常一个语句生成多条机器指令的代码段。运行模块负责控制这段代码的执行并处理中间结果(保存或输出)。另一种方法是,解释模块生成语句等价的中间代码(但不是机器语言代码),如程序调用及其参数形式。运行模块负责选择相应功能部分并控制中间代码的执行,并处理相关运行结果。
特点
解释程序的工作方式非常适于人通过终端设备与计算机会话,如在终端上打一条命令或语句,解释程序就立即将此语句解释成一条或几条指令并提交硬件立即执行且将执行结果反映到终端,从终端把命令打入后,就能立即得到计算结果。
这的确是很方便的,很适合于一些小型机的计算问题。但解释程序执行速度很慢,例如源程序中出现循环,则解释程序也重复地解释并提交执行这一组语句,这就造成很大浪费。
对源程序边解释翻译成机器代码边执行的高级语言程序。所以,解释程序的功能是:解释执行高级语言程序。由于它的方便性和交互性较好,早期一些高级语言采用这种方式,如BASIC、dBASE。但它的弱点是运行效率低,程序的运行依赖于开发环境,不能直接在操作系统下运行。
解释程序的突出优点是可简单地实现,且易于在解释执行过程中灵活、方便地插入修改和调试措施,但最大缺点是执行效率很低。例如,需要多次重复执行的语句,采用编译程序时只需要翻译一次;但在解释程序中却需要重复翻译,重复执行。
适用范围
1、有些语言中的大多数语句,如字符串加工语言中的字符串查找语句和加工语句,其执行时间比翻译时间长得多。对于这种语言,采用生成性方案,效果甚微,而采用解释性方案则易于实现。
2、为了便于用户调试和修改程序,又能保证程序高效运行,很多程序设计语言配置两个加工系统,一个用于调试,一个用于有效地运行。调试用的系统一般用解释程序实现,以便及时监视运行情况、动态地输出调试信息和灵活地修改错误。
3、交互式会话语言(如BASIC,APL),要为用户提供并行、交错编写、执行、调试和修改源程序的功能。采用解释程序易于实现这些功能。
命令解释程序的作用
在联机操作方式下,终端处理程序把用户键入的信息送键盘缓冲区中保存。一旦用户键入回车符,便立即把控制权交给命令处理程序。显然,对于不同的命令,应有能完成特定功能的命令处理程序与之对应。可见,命令解释程序的主要作用,是在屏幕上给出提示符,请用户键入命令,然后读入该命令,识别命令,再转到相应命令处理程序的入口地址,把控制权交给该处理程序去执行,并将处理结果送屏幕上显示。若用户键入的命令有错,而命令解释程序未能予以识别,或在执行中间出现问题时,则应显示出某一出错信息。
命令解释程序的组成
1、常驻部分
这部分包括一些中断服务子程序。例如,正常退出中断INT 20,它用于在用户程序执行完毕后,退回操作系统;驻留退出中断INT 27,用这种方式,退出程序可驻留在内存中;还有用于处理和显示标准错误信息的INT 24等。常驻部分还包括这样的程序:当用户程序终止后,它检查暂存部分是否已被用户程序覆盖,若已被覆盖,便重新将暂存部分调入内存。
2、初始化部分
它跟随在常驻内存部分之后,在启动时获得控制权。这部分还包括对AUTOEXEC.BAT文件的处理程序,并决定应用程序装入的基地址。每当系统接电或重新启动后,由处理程序找到并执行AUTOEXEC.BAT文件。由于该文件在用完后不再被需要,因而它将被第一个由COMMAND.COM装入的文件所覆盖。
3、暂存部分
这部分主要是命令解释程序,并包含了所有的内部命令处理程序、批文件处理程序,以及装入和执行外部命令的程序。它们都驻留在内存中,但用户程序可以使用并覆盖这部分内存,在用户程序结束时,常驻程序又会将它们重新从磁盘。
命令解释程序的工作流程
系统在接通电源或复位后,初始化部分获得控制权,对整个系统完成初始化工作,并自动执行AUTOEXEC.BAT文件,之后便把控制权交给暂存部分。暂存部分首先读入键盘缓冲区中的命令,判别其文件名、扩展名及驱动器名是否正确。若发现有错,在给出出错信息后返回;若无错,再识别该命令。一种简单的识别命令的方法是基于一张表格,其中的每一表目都是由命令名及其处理程序的入口地址两项所组成。如果暂存部分在该表中能找到键入的命令,且是内部命令,便可以直接从对应表项中获得该命令处理程序的入口地址 ,然后把控制权交给该处理程序去执行该命令。
全部0条评论
快来发表一下你的评论吧 !