Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解释程序(例如perl、shell)是如何工作的_Shell_Perl - Fatal编程技术网

解释程序(例如perl、shell)是如何工作的

解释程序(例如perl、shell)是如何工作的,shell,perl,Shell,Perl,我提出一个假设:1。操作系统创建一个进程空间来启动解释器;2.解释器创建一个新的进程空间来启动需要解释的程序,将第一条语句翻译成机器语言;3.第一条语句的执行结束并中断;4.解释器翻译下一条语句,并动态修改和创建新指令。嗯,我无法弥补。我无法理解解释和执行的概念。下面是一个示例解释器: while (<>) { my ($cmd, @args) = split; if ($cmd eq '...') { ... } elsif ($cmd eq '...')

我提出一个假设:1。操作系统创建一个进程空间来启动解释器;2.解释器创建一个新的进程空间来启动需要解释的程序,将第一条语句翻译成机器语言;3.第一条语句的执行结束并中断;4.解释器翻译下一条语句,并动态修改和创建新指令。嗯,我无法弥补。我无法理解解释和执行的概念。

下面是一个示例解释器:

while (<>) {
   my ($cmd, @args) = split;
   if    ($cmd eq '...') { ... }
   elsif ($cmd eq '...') { ... }
   elsif ($cmd eq '...') { ... }
   else                  { ... }
}
(抄袭自)

ops实际上是排列在链表中的数据结构(带有用于跳转的其他指针),而不是字节流编码指令。上面的循环遍历列表,执行与每个操作相关联的函数。这些函数返回要执行的下一个操作的地址,从而形成程序


有些语言可能采取类似的方法。其他语言肯定会采取不同的方法。

做一些搜索和阅读,你会发现这很容易。这超出了范围,请看一下口译页面。此外,本文还对当时的几个口译员进行了比较。当您运行Perl程序时,编译器首先编译源代码,然后执行它。在我看来,这似乎使Perl更像是一种编译语言而不是解释语言。