如果程序从未被翻译成机器语言,那么如何执行以解释语言编写的程序?

时间:2017-07-24 11:26:53

标签: programming-languages interpreter dynamic-languages compiler-construction

计算机只能理解机器语言。那么,如果没有将其翻译成机器语言,解释器如何直接执行程序呢?例如:

:443

这是一个用PHP编写的简单Hello World程序。如果机器不知道<?php echo "Hello, World!" ; 是什么,它如何在机器中执行?它是如何输出预期的,在这种情况下,字符串Hello,World!?

2 个答案:

答案 0 :(得分:6)

许多解释器,包括官方的PHP解释器,实际上在执行代码之前将代码转换为字节代码格式以实现性能(我认为是灵活性)的原因,但最简单的是,解释器只是通过代码并执行相应的每个陈述的行动。对于类似PHP的语言,一个非常简单的解释器可能如下所示:

def execute_program(prog)
  for statement in prog.toplevel_statements:
    execute_statement(statement)

def execute_statement(statement):
  if statement is an echo statement:
    print( evaluate_expression(statement.argument) )
  else if statement is a for loop:
    execute_statement(statement.init)
    while evaluate_expression(statement.condition).is_truthy():
      for inner_statement in statement.body:
        execute_statement(inner_statement)
      execute_statement(statement.increment)
  else if ...

请注意,一个大的if-else-if语句实际上并不是通过AST的最简洁方法,而真正的解释器也需要跟踪范围和调用堆栈来实现函数调用和返回。

但从最基本的角度来看,这就是它归结为:&#34;如果我们看到这种声明,请执行此类行动等。&#34;。

除了更复杂之外,它与编写响应用户命令的程序完全没什么不同,例如用户可以键入&#34;矩形&#34;然后你画一个矩形。在这里,CPU也不了解&#34;矩形&#34;意思是,但您的代码中包含if user_input == rectangle: [code to draw a rectangle]之类的内容,而这只是您需要的内容。

答案 1 :(得分:2)

严格地说,解释器正在执行,解释器解释的代码只决定了解释器采取的操作。 (如果 刚刚编译成机器代码,你需要解释器吗?)。

例如,我在一段时间内构建了一个自动化框架,我们在QA测试期间捕获了运行时发生的反射元数据。我们将该元数据序列化为JSON。 JSON从未编译成任何东西 - 它只是告诉自动化引擎要调用哪些方法以及要传递的参数。没有涉及机器代码。说我们是&#34;执行&#34;是完全正确的。 JSON - 我们正在执行自动化引擎,然后遵循&#34;方向&#34;在JSON中找到,但肯定是解释 JSON。