|
知识路径: > 计算机系统基础知识 > 计算机软件基础知识 > 程序设计语言和语言处理程序知识 > 汇编、编译、解释系统的基本知识和基本工作原理 > 程序语言翻译基础 > 解释程序基本原理 >
|
相关知识点:2个
|
|
|
|
解释程序通常可以分成两部分:第一部分是分析部分,包括通常的词法分析、语法分析和语义分析程序,经语义分析后把源程序翻译成中间代码,中间代码常采用逆波兰表示形式;第二部分是解释部分,用来对第一部分产生的中间代码进行解释执行。下面简要介绍第二部分的工作原理。
|
|
|
设用数组MEM模拟计算机的内存,源程序的中间代码和解释部分的各个子程序都存放在MEM中。全局变量PC是一个程序计数器,它记录了当前正在执行的中间代码的位置。这种解释部分的常见结构可以由下面两部分组成:
|
|
|
|
(2)执行位于opcode-table[MEM[PC]]的子程序(解释子程序执行后返回到前面)。
|
|
|
下面用一个简单例子来说明其工作原理。设两个实型变量A和B进行相加的中间代码是:
|
|
|
|
其中,中间代码Ipush和Iaddreal实际上都是opcode-table表的索引值(即位移),而该表的单元中存放的值就是对应的解释子程序的起始地址,A和B都是MEM中的索引值。解释部分开始执行时,PC的值为start-1。
|
|
|
|
|
|
其中,stackreal()表示把相应值压入栈中,而popreal()表示取得栈顶元素值并弹出栈顶元素。上面的代码基于栈实现了将两个数值相加并将结果存入栈中的处理。
|
|
|