免费智能真题库 > 历年试卷 > 嵌入式系统设计师 > 2015年下半年 嵌入式系统设计师 上午试卷 综合知识
  第20题      
  知识点:   解释器基础
  章/节:   嵌入式系统程序设计       

 
编译器和解释器是两种基本的高级语言处理程序。编译器对高级语言源程序的处理过程可以划分为词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等阶段,其中,(19)并不是每个编译器都必需的。与编译器相比,解释器(20)。
 
 
  A.  不参与运行控制,程序执行的速度慢
 
  B.  参与运行控制,程序执行的速度慢
 
  C.  参与运行控制,程序执行的速度快
 
  D.  不参与运行控制,程序执行的速度快
 
 
 

 
  第20题    2014年下半年  
   53%
将高级语言源程序翻译成机器语言程序的过程中,常引入中间代码。以下关于中间代码的叙述中,不正确的是(20)。
  第18题    2019年下半年  
   62%
将编译器的工作过程划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成时,语法分析阶段的输入是(18)。..
  第21题    2010年下半年  
   69%
编译程序分析源程序的阶段依次是(21)。
   知识点讲解    
   · 解释器基础
 
       解释器基础
        解释程序是另一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但是在运行用户程序时,它直接执行源程序或源程序的内部形式。因此,解释程序不产生源程序的目标程序,这是它和编译程序的主要区别。下图显示了以解释方式实现高级语言的三种方式。
        
        解释器类型示意图
        源程序被直接解释执行的处理方式如上图中的标记A所示。这种解释程序对源程序进行逐个字符的检查,然后执行程序语句规定的动作。
        例如,如果扫描到字符串序列:
        
        解释程序就开始搜索源程序中标号L后面紧跟冒号“:”的出现位置。这类解释程序通过反复扫描源程序来实现程序的运行,效率很低。
        解释程序也可以先将源程序转换成某种中间代码形式,然后对中间代码进行解释来实现用户程序的运行,这种翻译方式如上图中的标记B和C所示。通常,在中间代码和高级语言的语句间存在一一对应的关系。解释方式B和C的不同之处在于中间代码的级别,在方式C下,解释程序采用的中间代码更接近于机器语言。在这种实现方案中,高级语言和低级中间代码间存在着“1:n”的对应关系。PASCAL-P解释系统是这类解释程序的一个实例,它在词法分析、语法分析和语义分析的基础上,先将源程序翻译成P-代码,再由一个非常简单的解释程序来解释执行这种P-代码。这类系统具有比较好的可移植性。
        下面简要描述解释程序的基本结构。这类系统通常可以分成两部分:第一部分是分析部分,包括与编译过程相同的词法分析、语法分析和语义分析程序,经语义分析后把源程序翻译成中间代码,中间代码常采用逆波兰表示形式。第二部分是解释部分,用来对第一部分产生的中间代码进行解释执行。下面简要介绍第二部分的工作原理。
        设用数组MEM模拟计算机的内存,源程序的中间代码和解释部分的各个子程序都存放在数组MEM中。全局变量PC是一个程序计数器,它记录了当前正在执行的中间代码的位置。这种解释部分的常见结构可以由下面两部分组成。
        (1)PC:=PC+1;
        (2)执行位于opcode-table[MEM[PC]]的子程序(解释子程序执行后返回到前面)。用一个简单例子来说明其工作原理。设两个实型变量A和B进行相加的中间代码是:
        
        其中,中间代码Ipush和Iaddreal实际上都是opcode-table表的索引值(即位移),而该表的单元中存放着对应的解释子程序的起始地址,A和B都是MEM中的索引值。解释部分开始执行时,PC的值为start-1。
        
        解释部分可表示如下:
        
        其中,stackreal()表示把相应值压入栈中,而popreal()表示取得栈顶元素值并弹出栈顶元素。上面的解释部分基于栈实现了将两个数值相加并将结果存入栈中的处理。
        对于高级语言的编译和解释翻译方式,可从以下几个方面进行比较。
        (1)效率。编译比解释方式可能取得更高的效率。
        一般情况下,在解释方式下运行程序时,解释程序可能需要反复扫描源程序。例如,每一次引用变量都要进行类型检查,甚至需要重新进行存储分配,从而降低了程序的运行速度。在空间上,以解释方式运行程序需要更多的内存,因为系统不但需要为用户程序分配运行空间,而且要为解释程序及其支撑系统分配空间。
        在编译方式下,编译程序要生成源程序的目标代码并进行优化,该过程比解释方式需要更多的时间。虽然与仔细写出的机器程序相比,一般由编译程序创建的目标程序运行的时间更长,需要占用的存储空间更多,但源程序只需要被编译程序翻译一次,就可以多次运行。因此总体来讲,编译方式比解释方式可能取得更高的效率。
        (2)灵活性。由于解释程序需要反复检查源程序,这也使得解释方式能够比编译方式更灵活。当解释器直接运行源程序时,“在运行中”修改程序就成为可能,例如增加语句或者修改错误等。另外,当解释器直接在源程序上工作时,它可以对错误进行更精确地定位。
        (3)可移植性。源程序是由解释器控制来运行的,可以提前将解释器安装在不同的机器上,从而使得在新环境下无需修改源程序使之运行。而编译方式下则需要针对新机器重新生成源程序的目标代码才能运行。
        由于编译方式和解释方式各有特点,因此现在的一些编译系统既提供编译的方式,也提供解释的方式,甚至将两种方式结合在一起。例如,在Java虚拟机上发展的一种compiling-just-in-time技术,就是当一段代码第一次运行时进行编译,其后运行时就不再进行编译了。
   题号导航      2015年下半年 嵌入式系统设计师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第20题    在手机中做本题