学习笔记——解释器

article/2025/9/15 11:46:27

      解释器(英语:Interpreter),又译为直译器,是一种电脑程序,能够把高级编程语言一行一行直接转译运行。解释器不会一次把整个程序转译出来,只像一位"中间人",每次运行程序时都要先转成另一种语言再作运行,因此解释器的程序运行速度比较缓慢。它每转译一行程序叙述就立刻运行,然后再转译下一行,再运行,如此不停地进行下去。

      解释器针对不同的硬件平台实现了一个虚拟机,可以仿真硬件的执行过程和一些关键应用,来弥合程序语义与硬件语义之间的差异。

 

解释器的组成

       一个解释器通常包括完成解释工作的解释引擎,一个包含将被解释的代码的存储区,一个记录解释引擎当前工作状态的数据结构,以及一个记录源代码被解释执行的数据结构。

      

      基本构件:

      解释器引擎

      被解释源代码

      存储区

      解释器引擎的当前的内部控制状态的表示

      程序当前执行状态的表示

      连接件:

      对存储区的数据访问

 

Small BASIC解释器

      包括两个主要的子系统:一个是表达式解析器,负责处理数字表达式;另一个是解释器,负责程序的实际执行。

      包含在同一个解释器类中,该类名为SBasic。

      两者用同一个类的好处:实现时的效率会更高。

      因为表达式解析器和解释器的代码是密不可分的。例如,两个子系统都操作保存着程序代码的同一个字符数组。如果将它们分别安排在两个类中,将会增加可观的额外开销,并导致性能上的损失和功能上的重复。程序解释的任务繁重,而解析表达式只是其中的一部分。

 

解释器的三种策略:

      1.传统解释器(ASP /excel/JavaScript/MATLAB/etc)

      直接运行高级编程语言 (如 Shell 自带的解释器)

     /* shell

      在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。它类似于DOS下的command.com。它接收用户命令,然后调用相应的应用程序。同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。*/

      

      2.字节码解释器(例如:Java/python)

      在该类解释器下,源代码首先被“编译”为高度压缩和优化的字节码,但并不是真正的机器目标代码,因而与硬件平台无关;编译后得到的字节码然后被解释器加以解释;

      /*字节码

      字节码(Byte-code)是一种包含执行程序、由一序列 op 代码/数据对组成的二进制文件。字节码是一种中间码,它比机器码更抽象。它经常被看作是包含一个执行程序的二进制文件,更像一个对象模型。字节码被这样叫是因为通常每个 opcode 是一字节长,但是指令码的长度是变化的。每个指令有从 0到255(或十六进制的: 00 到FF)的一字节操作码,被参数例如寄存器或内存地址跟随。*/

      

      JAVA

      Java的源程序不是直接交给解释器解释,而是先经过一个编译过程,把Java源程序翻译成一种特定的二进制字节码文件,再把这个字节码文件交给Java解释器来解释执行。

      3.实时编译

      以解释器包含的编译器对高级语言编译,并指示处理器运行编译后的程序 (例如:JIT)

      实时编译JIT中,字节码在运行时被编译为本机的目标代码。第一步是编译得到字节码,字节码被配置到目标系统中,当字节码被执行时,运行环境下的编译器将其翻译为本地机器码。JIT模糊了解释器、字节码解释器和编译器之间的边界与区分。

      

 

       JIT编译部分:当某个函数要被执行时或被频繁执行的代码段

 

直译与编译的比较:

      1.在解释器上运行程序比直接运行编译过的代码来得慢,是因为每次解释执行时候,都需要分析程序的结构,而编译代码则直接执行而无需重复编译。解释器对内存的分配是在解释时才进行的;而编译器则是在编译时进行,因此运行时直接将程序代码装入内存并执行即可。

      2.在程序开发的雏型化阶段和只是撰写试验性的代码时尤其来得重要,因为这个"编辑-直译-除错"的循环通常比"编辑-编译-运行-除错"的循环来得省时许多。

      3.可携性佳,直译式程序相较于编译式程序有较佳的可携性,可以容易的在不同软硬件平台上运行。而编译式程序经过编译后的程序则只限定于运行在开发环境平台。

      4.在使用解释器来达到较快的开发速度和使用编译器来达到较快的运行进度之间是有许多妥协的。

      有些系统(例如有一些LISP)允许直译和编译的代码互相调用并共享变量。

      许多解释器并不像其名称所说的那样运行原始代码,反而是把原始代码转换成更压缩的内部格式。例如,用Emacs Lisp所撰写的源代码会被编译成一种高度压缩且优化的另一种Lisp源代码格式,这就是一种字节码(bytecode),而它并不是机器码(因此不会被绑死在特定的硬件上)。这个"编译过的"码之后会被字节码直译器(使用C写成的)转译。解释器也可以使用如同编译器一般的文字分析器(lexical analyzer)和 语法分析器(parser)然后再转译产生出来的抽象语法树(abstract syntax tree)。

 

参考来源:

http://xue163.com/2089/1/20890552.html

http://baike.so.com/doc/5904938-6117840.html

http://www.doc88.com/p-333761462276.html

转载于:https://www.cnblogs.com/jingzheng/p/5291975.html


http://chatgpt.dhexx.cn/article/TG0Zs0Xp.shtml

相关文章

【设计模式】解释器模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

文章目录 一、解释器模式简介二、解释器模式适用场景三、解释器模式优缺点四、解释器模式与适配器模式五、解释器模式代码示例1、解释器接口2、加法解释器3、乘法解释器4、整型解释器5、语法解析类6、工具类7、测试类 一、解释器模式简介 解释器模式 : 给定一个 语言 , 定义它的…

linux每周2 4 6执行定时任务,linux计划任务crontab例子

/root/send_msg.sh #要自动执行的脚本程序路径 chmod +x /root/send_msg.sh #对脚本文件添加执行权限,否则不能执行 vim /etc/crontab #编辑配置文件,在最后一行添加内容 30 1 * * * root /root/send_msg.sh #表示每天凌晨1点30执行备份 :wq! #保存退出 service crond restar…

Crontab 在线生成器 - Linux计划任务

Linux系统里有一个很方便的程序「例行性计划任务」(Crontab),接触过的朋友一定不陌生。Crontab 主要是让系统去执行一些固定时间要自动进行的例行性工作,最常用的例如备份资料、移除暂存文件、更新或重新启动等等。如果将某个周期…

Linux计划任务以及进程检测与控制

安装第三方环境变量 /etc/profile PATH export PATH $home /.bashrc 当前用户的bash信息(aliase,umask) $home/.bash_profile 当前用户的环境变量的信息 $home /.bash_logout /ect/bashrc 使用bash shell用户全局变量 /etc/profile 系统和…

Linux服务器查看任务计划,Linux的任务计划

Linux的任务计划 我们在使用系统的过程中,经常需要在以后的某个时间点执行一个任务,而我们又不在机器旁边的时候,比如在半夜时服务器访问的用户很少,宽带资源很充足的时候,要去镜像软件包、重启服务器(虽然Linux很稳定…

Linux 计划任务讲解

目录 计划任务 一次性计划任务 长期性计划任务 计划任务 管理员可以编辑自己的和普通用户的计划任务 普通用户只可以编辑自己的计划任务 计划任务根据执行方式分为一次性计划任务、长期性计划任务 一次性计划任务 此计划只执行一次,执行后或就不会再执行了 通…

Linux计划任务-定时任务

Linux计划任务-定时任务 at单次计划任务at命令格式查看at任务取消at计划任务创建1分钟后的单次任务 定时任务分类cron系统任务调度/etc/crontab文件格式 用户任务调度安装crontab conrtab常用添加计划任务指定用户创建计划任务 查看用户的计划任务计划任务日志存储目录查看所有…

Linux 计划任务

计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据。 #分类 ##一次性调度执行 at Schedule one-time tasks with at. 语法格式:at 时间点 例如: [rootBJcoud_computing_hp_hao ~]# at now 2min 2分钟之后 [rootBJcoud_co…

Linux基础之计划任务

在Linux的运维中,我们经常会使用到计划任务,所谓计划任务就是在某个时间让计算机做某件事情。我们可以将计划任务分为一次性的调度执行和循环调度执行。 一、一次性调度执行 一次性调度执行在实际情况中使用少于循环调度执行。在Linux操作系统中使用at &…

linux(计划任务)

一、概念 计划任务就是按照计划定时的去执行任务 二、crond程序--是linux里负责执行计划任务的程序 (1)使用crontab命令调用crond进程 (2)crond程序--每隔一分钟去检查是否有计划任务要执行. 2、crond进程的启动、重启、停止 …

Excel2019打开文件时会同时打开一个名为Sheet1的未保存空白工作簿

因为安装了MySQL导致 解决办法: 1、右键EXCEL以管理员身份打开 2、点击“文件”——“选项”——“加载项” 在下方“管理”的下拉框中选择“COM加载项” 点击“转到”,在弹出的界面中取消MySQL For Excel的勾选——确定 再次打开Excel便不会出现打开…

EXCEL每次打开文件都会出现一个空白sheet1窗口

不需要禁用所有加载项,禁用所有的加载项会影响功能,找到COM加载项,转到,取消勾选MySQL的加载项,取消后没有自动创建的sheet1工作簿了,希望有帮助

“EXCEL 文件打开后,显示空白”的解决方法

今天遇到一个很奇怪的问题,一个Excel文件,大小大概50K左右,里面肯定是有内容的。 但打开后,显示的却是空白,如下图: 临时解决方案: 选择打开方式“使用IE打开”,之后弹出的对话框&am…

excel表格打开灰色,没有内容

1、修改注册列表,快捷键 winR,然后输入regedit,回车进入; 2、找 HKEY_CLASSES_ROOT ; Excel.Sheet.12 ; shell ; open ; command ; 3、双击右侧“默认”图标编辑,将数值最后的/dde修改成"%1"😭"%1"与前面的…

已解决:EXCEL每次打开文件都会再出现一个空白sheet1文件

问题描述 安装过MySQL后,它自动关联到excel ,以引用其数据源。但是这样一来,每次打开,都会加载一个新的文件sheet1,每次都得手动关闭;在网上搜了一大堆(什么禁用相关COM加载项,等等…

Excel2016打开文件空白

安装Office 2016,打开excel文件,显示空白 解决方案 winr,输入regedit定位到HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command将原值修后加上"%1"(包括英文半角双引号,前面有一空格),修改以后为 "C:\Program Files\Micros…

Excel打开之后没有内容显示一片空白

打开一个有内容的excel表格,发现没有任何显示,一片空白 解决办法: 开始 — 运行 — regedit 修改HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command项默认值 原值: "C:\Program Files\Microsoft Office\Root\Offic…

直接打开xls、xlsx文件,Excel显示灰色空白

。。。 最近我需要使用visio,但是我的office365里没有,于是我下载了一个visio 2016,安装的时候连着office2016一同安装了,不知道能不能共存,之后直接打开xls、xlsx等文件会出现灰色空白,必须进入excel程序…

【软件】Excel打开空白,需要在里面再次选择文件位置打开

前面介绍了Excel打开报错 0xc0000022的解决办法,方法请点击连接: https://blog.csdn.net/qq_26741933/article/details/111225800 但是发现打开表格全部是灰色,需要点击"文件"--“打开” 选择文件位置才能打开: 需要修…

Excel:打开后有空白的Sheet1

我是在装了MySQL 5.8以后,就出现了这个问题。 无论开什么Excel文件,甚至直接打开excel这个程序,都会出现一个空白的Sheet1。 查到了资料,禁用MySQL的加载项即可。 Excel - 文件 - 选项 - 加载项 - MySQL For Excel - 管理选到“…