编译原理复习题一、填空题:1、编译方式与解释方式的根本区别在于(是否生成目标代码)。2、对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。3、如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:(编译阶段)和(运行阶段)。4、如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分成三个阶段:(编译阶段)、(汇编阶段)和(运行阶段)。5、自顶向下语法分析方法会遇到的主要问题有(回溯)和((左递归带来的)无限循环)。6、LL(k)分析法中,第一个L的含义是(从左到右进行分析),第二个L的含义是(每次进行最左推导),“k”的含义是(向输入串中查看K个输入符号)。7、LL(1)分析法中,第一个L的含义是(从左到右进行分析),第二个L的含义是(每次进行最左推导),“1”的含义是(向输入串中查看1个输入符号)。8、自顶向下语法分析方法的基本思想是:从(识别符号)出发,不断建立(直接推导),试图构造一个推导序列,最终由它推导出与输入符号相同的(符号串)。9、自底向上语法分析方法的基本思想是:从待输入的符号串开始,利用文法的规则步步向上进行(直接归约),试图(归约)到文法的(识别符号|开始符号)。10、LR(0)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“0”的含义是(向貌似句柄的符号串后查看0个输入符号)。11、LR(1)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。12、SLR(1)分析法的名字中,“S”的含义是(简单的),“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。13、在编译过程中,常见的中间语言形式有(逆波兰表示)、(三元式)、(四元式)和(树形表示)。14、在编译程序中安排中间代码生成的目的是(便于代码优化)和(便于目标程序的移植)。15、表达式-a+b*(-c+d)的逆波兰表示为(a-bc-d+*+)。16、表达式a+b*(c+d/e)的逆波兰表示为(abcde/+*+)。17、表达式a:=a+b*c↑(d/e)/f的逆波兰表示为(aabcde/↑*f/+:=)。18、文法符号的属性有(继承属性)和(综合属性)两种。19、一个文法符号的继承属性是通过语法树中它的(兄弟结点与父)结点的相应文法符号的属性来计算的。20、一个文法符号的综合属性是通过语法树中它的(子)结点的属性来计算的。21、语法制导的编译程序能同时进行(语法)分析和(语义)分析。22、编译过程中扫描器所完成的任务是从(源程序)中识别出一个个具有(独立语法意义的单词)。23、确定的有穷自动机是一个(五元组),通常表示为(DFA=(K,∑,M,S,Z))。24、已知文法G(E):E-T|E+T|E-TT-F|T*F|T/FF-(E)|i该文法的开始符号是(E),终结符号集合VT是({+,-,*./,(,),i}),非终结符号集合VN是({E,T,F}),句型T+T*F+i的短语有(T+T*F+I,T*F第一个T,i)。25、已知文法G(E):E-T|E+T|E-TT-F|T*F|T/FF-(E)|i改写该文法以消除直接左递归,改写后的文法为:E-(+TE‘|-TE‘|ε),T-(FT‘),(T‘-*FT‘|ε),F-((E)|i)。26、已知文法G(Z):Z-U0|V1U-Z1|1V-Z0|0请写出全部由此文法描述的只含四个符号的句子:(0101,1010,1001,0110)。该文法是Chomsky(3)型文法。27、Chomsky定义的四种形式语言文法分别为:(0型)文法--又称(短语文法)文法,(1型)文法--又称(上下文有关)文法,(2型)文法--又称(上下文无关)文法,(3型)文法--又称(正则)文法。28、文法G(S):S-ABA-aAb|abB-Bc|ε其描述的语言L(G[S])=(anbncm,n≥1,m≥0)。29、文法G(S):S-SAS|b|cA-aaA|a其描述的语言L(G[S])=(b,C,或者是以b开头、以c结尾的、中间是任意个由b或c间隔开的奇数个a组成的符号串)。30、过程与过程引用中信息交换的方法是(全局变量的使用)和(参数传递)。31、形式参数和实在参数之间的对应关系通常按(它们在源程序中的位置)来确定。32、按传结果的方式进行形实参数结合,是一种把(传地址)和(传值)的特点相结合的参数传递方式。33、在PASCAL中,由于允许用户动态申请与释放内存空间,所以必须采用(堆)存储分配方式。34、编译程序进行数据流分析的目的是(为了进行全局优化)。35、根据所涉及程序的范围,优化可分为(局部优化)、(循环优化)和(全局优化)三种。36、局部优化是局限于一个(基本块)范围内的一种优化。37、词法分析阶段的错误主要是(拼写错误),可通过(最小距离匹配)的办法去纠正错误。38、对错误的处理方法一般有(校正法)和(局部优化法)。39、源程序中的错误一般有(词法错误)、(语法错误)、(语义错误)和(违反环境限制的错误)四种。40、翻译程序是这样一种程序,它能够将(用甲语言书写的程序)转换成与其等价的(用乙语言书写的程序)。41、编译程序的工作过程一般可以划分成(词法分析、语法分析、语义分析、中间代码生成、代码优化)等五个基本阶段。42、编译程序的工作过程还会伴有(表格处理)和(出错处理)。二、选择题:1、在使用高级语言编程时,首先可通过编译程序发现源程序的全部(A)错误和部分(B)错误。A、语法B、语义C、语用D、运行2、程序语言的处理程序是一种(A)。A、系统软件B、应用软件C、实时系统D、分布式系统3、(B)是两类程序语言处理程序,它们的主要区别在于是否生成目标代码。A、高级语言和低级语言B、解释程序和编译程序C、编译程序和操作系统D、系统程序和应用程序4、汇编语言是将(A)翻译成(B);编译程序是将(C)翻译成(D)。A、汇编语言程序B、机器语言程序C、高级语言程序D、汇编或机器语言程序e、汇编或高级语言程序F、机器或高级语言程序5、编译程序与具体的机器(A),与具体的语言(B)。A、有关B、无关6、编译程序生成的目标程序(B)是可执行的程序。A、一定B、不一定7、编译程序生成的目标程序(B)是机器语言程序。A、一定B、不一定8、把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。A、编译器B、汇编器C、解释器D、预处理器9、编译过程中,语法分析器的任务是(B)。(1)分析单词是怎样构成的;(2)分析单词串是如何构成语句和说明的;(3)分析语句和说明是如何构成程序的;(4)分析程序的结构A、(2)(3)B、(2)(3)(4)C、(1)(2)(3)D、(1)(2)(3)(4)10、文法G所描述的语言是(D)的集合A、文法G的字母表V中所有符号组成的符号串;B、文法G的字母表V的闭包V*中的所有符号串;C、由文法的识别符号推出的所有符号串;D、由文法的识别符号推出的所有终结符符号串;11、描述语言L={ambn|nm1}的文法为(D)。A、Z-Abb,A-aA|a,B-bB|bB、Z-ABb,A-Aa|a,B-aBb|bC、Z-Ab,A-aAb|aD、Z-aAb,A-Ab|aAb|@12、一个句型中的最左(B)称为该句型的句柄。A、短语B、简单短语C、素短语D、终结符号13、文法的二义性和语言的二义性是两个(A)的概念。A、不同B、相同C、无法判断14、上下文无关文法(A)产生语言L={ambnci|i1,n1}A、可以B、不可以15、(B)正规文法能产生下面的语言:L={ambn|n1}A、存在一个B、不存在任何c、无法判断16、编译程序中的语法分析器接受以(C)为单位的输入,并产生有关信息供以后各阶段使用。A、表达式B、产生式C、单词D、语句17、高级语言编译程序常用的语法分析方法中,递归下降分析法属于(B)分析方法。A、自左至右B、自顶向下C、自底向上D、自右至左18、算符优先分析法每次都是对(E)进行归约,简单优先分析法每次都是对(C)进行归约。A、最左短语B、简单短语C、句柄D、素短语E、最左素短语19、文法G(S):S—aTb|,,T-R,R—R/S|S的句型aR/aSb/aTb,b的最左素短语为(B)。A、aTbB、aSbC、SD、R/E、,20、LR语法分析栈中存放的状态是识别(B)的DFA状态。A、前缀B、可归前缀C、项目D、句柄21、已知文法G[S]:s-LaR|R,L-bR|c,R-L该文法是(B)。(1)LR(0)文法;(2)SLR(1)文法;(3)LR(1)文法;(4)LALR(1)文法;(5)都不是A、(1)(2)B、(3)(4)C、(1)(2)(3)(4)D、(5)E、(6)22、若一个句型中出现了某一产生式的右部,则此右部(B)是该句型的句柄。A、一定B、不一定23、LR(K)方法是(D)。A、从左到右分析,每次走K步的一种编译方法B、从左到右分析,共经过K步的一种编译方法C、从左到右分析,每次向前预测K步的一种编译方法D、从左到右分析,每次向貌似句柄的符号串后看K个输入符号的一种编译方法24、文法G[S]:S-AA,A-Aa|a不是LR(1)文法的理由是(D)A、FIRST(S)NFIRST(A)≠фB、FIRST(A)NFOLLLOW(A)≠фC、FIRST(Aa)NFIRST(a)≠фD、都不是25、下列关于标识符和名字的叙述中,正确的是(C)。A、标识符有一定的含义B、名字是一个没有意义的字符序列C、名字有确切的属性D、都不对26、编译程序在其工作过程中使用最多的数据结构是(C)。它记录着源程序中的各种信息,以便查询或修改。A、线性表B、链表C、表D、符号表27、在编译程序在其工作过程中使用的各种表中,以(D)最重要,其生存期最长,使用也最频繁。A、线性表B、链表C、表D、符号表28、编译程序使用(B)区别标识符的作用域。A、说明标识符的过程或函数名B、说明标识符的过程或函数的静态层次C、说明标识符的过程或函数的动态层次D、标识符的行号29、动态存储分配时,可以采用的分配方法有(C)。(1)以过程为单位的栈式动态存储分配;(2)堆存储分配;(3)最佳分配方法A、(1)B、(2)C、(1)(2)D、(1)(2)(3)30、过程调用时,参数的传递方法通常有(D)。(1)传值;(2)传地址;(3)传结果;(4)传名A、(1)(2)B、(1)(2)(3)C、(1)(2)(4)D、(1)(2)(3)(4)31、在编译方法中,动态存储分配的含义是(A)。A、在运行阶段对源程序中的量进行分配B、在编译阶段对源程序中的量进行分配C、在编译阶段对源程序中的量进行分配,在运行时这些量的地址可以根据需要改变D、以上都不对32、PASCAL中过程说明的局部量地址分配在(B)。A、调用者的数据区中B、被调用者的数据区C、主程序的数据区D、公共数据区33、表达式-a+b*c+d+(e*f)/d*e,如果优先级由高到低依次为-、+、*、/,且均为左结合,则其后缀式为(D)。A、abc*+d+ef*d/e*+-B、a-bc*def*d/e*+++C、a-bc*+def*d/e*++D、a-b+cd+ef*+*de*/34、表达式a*b-c-d$e$f-g-h*i中,运算符的优先级由高到低依次为-、*、$,且均为右结合,则其后缀式为(D)。A、ab*c-d-e$fg-h-i*$B、$*a-b-cd$e*-f-ghiC、bcd--a*efgh--i*$$D、abcd--*efgh--i*$$E、ab*c-d-e$fg-h-i*$35、a:=a+b*c↑(d/e)/f的逆波兰记号表示是(C)。A、aabc*+↑de/f/:=