计算机只能理解机器语言。那么,如果没有将其翻译成机器语言,解释器如何直接执行程序呢?例如:
:443
这是一个用PHP编写的简单Hello World程序。如果机器不知道<?php
echo "Hello, World!" ;
是什么,它如何在机器中执行?它是如何输出预期的,在这种情况下,字符串Hello,World!?
答案 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。