编译原理考研真题

合集下载

编译原理试题及答案

编译原理试题及答案

编译原理试题及答案一、选择题1. 编译器的主要功能是什么?A. 程序设计B. 程序翻译C. 程序调试D. 数据处理答案:B2. 下列哪一项不是编译器的前端处理过程?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D3. 在编译原理中,词法分析器的主要作用是什么?A. 识别程序中的关键字和标识符B. 将源代码转换为中间代码C. 检查程序的语法结构D. 确定程序的运行环境答案:A4. 语法分析通常采用哪种方法?A. 自顶向下分析B. 自底向上分析C. 正则表达式匹配D. 直接解释执行答案:B5. 语义分析的主要任务是什么?A. 检查程序的语法结构B. 检查程序的类型安全C. 识别程序中的变量和常量D. 将源代码转换为机器代码答案:B二、简答题1. 简述编译器的工作原理。

答案:编译器的工作原理主要包括以下几个步骤:词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。

词法分析器将源代码分解成一系列的词素;语法分析器根据语法规则检查词素序列是否合法;语义分析器检查程序的语义正确性;中间代码生成器将源代码转换为中间代码;代码优化器对中间代码进行优化;最后,目标代码生成器将优化后的中间代码转换为目标机器代码。

2. 什么是词法分析器,它在编译过程中的作用是什么?答案:词法分析器是编译器前端的一个组成部分,负责将源代码分解成一个个的词素(tokens),如关键字、标识符、常量、运算符等。

它在编译过程中的作用是为语法分析器提供输入,是编译过程的基础。

三、论述题1. 论述编译器中的代码优化技术及其重要性。

答案:代码优化是编译过程中的一个重要环节,它旨在提高程序的执行效率,减少资源消耗。

常见的代码优化技术包括:常量折叠、死代码消除、公共子表达式消除、循环不变代码外提、数组边界检查消除等。

代码优化的重要性在于,它可以显著提高程序的运行速度和性能,同时降低程序对内存和处理器资源的需求。

四、计算题1. 给定一个简单的四则运算表达式,请写出其对应的逆波兰表达式。

编译原理-试题及参考答案(魏国利)

编译原理-试题及参考答案(魏国利)

试题(共10道)1.设∑={0,1}上的正规集S由倒数第二个字符为1的所有字符串组成,请给出该字集对应的正规式,并构造一个识别该正规集的DFA。

2.已知文法G[S’] :S’→SS→rDD→D,iD→i(1)构造G[S’]的识别活前缀的有穷自动机DFA。

(2)该文法是LR(0)文法吗?为什么?3.已知文法G[S’] :S’→S (1)S→AAA (2)A→1A (3)A→0 (4)(1)构造G[S’]的识别活前缀的有穷自动机DFA。

(2)构造相应的LR(0)分析表。

4.构造一个DFA,它接受∑={a,b}上所有包含ab的字符串。

5.构造正规式 (0|1)*00 相应的DFA并进行化简。

6.构造以下正规式相应的NFA,再确定化10(1|0)*117. 设有语言L={ α | α∈{0,1} + ,且α不以0 开头,但以00 结尾} 。

(1)试写出描述L 的正规表达式;(2)构造识别L 的DFA (要求给出详细过程,并画出构造过程中的NDFA 、DFA 的状态转换图,以及DFA 的形式化描述) 。

8.已知NFA=({x,y,z},{0,1},M,{x},{z}),其中:M(x,0)={z},M(y,0)={x,y},,M(z,0)={x,z},M(x,1)={x},M(y,1)=φ,M(z,1)={y},构造相应的DFA。

9. 给出下述文法所对应的正规式:S→0A|1BA→1S|1B→0S|010. 将下图的DFA 最小化,并用正规式描述它所识别的语言。

答案1.答:构造相应的正规式:(0|1)*1(0|1) NFA:12.答:(1) G[S ’]的识别活前缀的有穷自动机为: (2) 该文法不是LR (0)文法,因为I 3中有移进—规约冲突。

3.答:(1) G[S’]的识别活前缀的有穷自动机为:(2)4.答:构造相应的正规式:(a|b)*ab(a|b)*确定化:最小化:{0,1,2} {3,4,5} {0, 2},1, {3,4,5}5.答:最小化:{1,2,3} {4}{1,2,3}0={2,4} {1,3} {2} {4}6.答:(1)正规表达式:1(0|1) * 00(2)第一步:将正规表达式转换为NDFA第二步:将NDFA 确定化为DFA :造表法确定化,确定化后DFA M 的状态转换表状态输入I 0 I 1 t 0 1 [S] —[A,D,B] q 0 —q 1 [A,D,B] [D,B,C] [D,B] 重新命名q 1 q 2 q 3 [D,B,C] [D,B,C,Z] [D,B] q 2 q 4 q 3 [D,B] [D,B,C] [D,B] q 3 q 2 q 3 [D,B,C,Z] [D,B,C,Z] [D,B] q 4 q 4 q 3DFA 的状态转换图第三步:给出DFA 的形式化描述DFA M = ({ q 0 , q 1 , q 2 , q 3 , q 4 }, {0,1}, t, q 0 , { q 4 } )t 的定义见M 的状态转换表。

编译原理复习题及答案

编译原理复习题及答案

编译原理复习题及答案一、选择题1.一个正规语言只能对应(B)A 一个正规文法B 一个最小有限状态自动机2.文法G[A]:A→εA→aB B→Ab B→a是(A)A 正规文法B 二型文法3.下面说法正确的是(A)A 一个SLR(1)文法一定也是LALR(1)文法B 一个LR(1)文法一定也是LALR(1)文法4.一个上下文无关文法消除了左递归,提取了左公共因子后是满足LL(1)文法的(A)A 必要条件B 充分必要条件5.下面说法正确的是(B)A 一个正规式只能对应一个确定的有限状态自动机B 一个正规语言可能对应多个正规文法6.算符优先分析与规范归约相比的优点是(A)A 归约速度快B 对文法限制少7.一个LR(1)文法合并同心集后若不是LALR(1)文法(B)A 则可能存在移进/归约冲突B 则可能存在归约/归约冲突C 则可能存在移进/归约冲突和归约/归约冲突8.下面说法正确的是(A)A Lex是一个词法分析器的生成器B Yacc是一个语法分析器9.下面说法正确的是(A)A 一个正规文法也一定是二型文法B 一个二型文法也一定能有一个等价的正规文法10.编译原理是对(C)。

A、机器语言的执行B、汇编语言的翻译C、高级语言的翻译D、高级语言程序的解释执行11.(A)是一种典型的解释型语言。

A.BASIC B.C C.FORTRAN D.PASCAL 12.把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。

A. 编译器B. 汇编器C. 解释器D. 预处理器13.用高级语言编写的程序经编译后产生的程序叫(B)A.源程序B.目标程序C.连接程序D.解释程序14.(C)不是编译程序的组成部分。

A.词法分析程序B.代码生成程序C.设备管理程序D.语法分析程序15.通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等六个部分,还应包括(C)。

A.模拟执行器B.解释器C.表格处理和出错处理D.符号执行器16.编译程序绝大多数时间花在(D)上。

编译原理考试试题

编译原理考试试题

编译原理考试试题( B 卷)备注:学生不得在试题纸上答题(含填空题、选择题等客观题一、填空题(每空1分,共20分)1.编译过程一般分为、、中间代码生成、和目标代码生成五个阶段。

2.语法分析最常用的两类方法是和分析法。

3.确定的有穷自动机是一个,通常表示为。

4.所谓最右推导是指。

5.语法分析器的任务是。

6.如果一个文法的任何产生式的右部都不含有的非终结符,则这种文法称为文法。

7.进行确定的自上而下语法分析要求语言的文法是无和的。

8.LR分析法是一种的语法分析方法。

9.根据优化对象所涉及的程序范围,代码优化分为、和等。

10.常用的优化技术包括:、、强度削弱、复写传播、等。

二、是非题(下列各题,你认为正确的,请在题后的括号内打“√”,错的打“×”。

每题2分,共20分)1.正规文法产生的语言都可以用上下文无关文法来描述。

…………………… ( ) 2.仅考虑一个基本块,不能确定一个赋值是否真是无用的。

………………………()3.如果一个文法是递归的,则其产生的语言的句子是无穷个。

…………………()4.四元式之间的联系是通过符号表实现的。

…………………………………………()5.文法的二义性和语言的二义性是两个不同的概念。

…………………………()6.一个LL( l)文法一定是无二义的。

……………………………………………… ( ) 7.在规范规约中用最左素短语来刻划可归约串。

……………………………… ( ) 8.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。

…………… ( ) 9.编译程序是对汇编程序的翻译。

……………………………………()10.逆波兰法表示的表达式亦称前缀式。

…………………………………………… ( )三、简答题(每题5分,共15分)1、简述栈式存储管理策略;2、何谓DAG;3、何谓文法的二义性;四、给出下述文法对应的正规式(7分)S→ 0A| 1BA→1S | 1B→0S | 0五、已知文法G(E):E→T | E+T | E-TT→F | T*F | T/FF→(E) | i证明E+T*F是该文法的一个句型,并指出该句型的所有短语、直接短语和句柄。

完整word版编译原理考试试题及答案

完整word版编译原理考试试题及答案

完整word版编译原理考试试题及答案《编译原理》考试试题及答案(附录)一、判断题:1.一个上下文无关文法的开始符,可以是终结符或非终结符。

( X )2.一个句型的直接短语是唯一的。

( X )3.已经证明文法的二义性是可判定的。

( X )4.每个基本块可用一个DAG表示。

(√)5.每个过程的活动记录的体积在编译时可静态确定。

(√)6.2型文法一定是3型文法。

( x )7.一个句型一定句子。

( X )8.算符优先分析法每次都是对句柄进行归约。

(应是最左素短语) ( X )9.采用三元式实现三地址代码时,不利于对中间代码进行优化。

(√)10.编译过程中,语法分析器的任务是分析单词是怎样构成的。

( x )11.一个优先表一定存在相应的优先函数。

( x )12.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。

( )13.递归下降分析法是一种自下而上分析法。

( )14.并不是每个文法都能改写成LL(1)文法。

( )15.每个基本块只有一个入口和一个出口。

( )16.一个LL(1)文法一定是无二义的。

( )17.逆波兰法表示的表达试亦称前缀式。

( )18.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。

( )19.正规文法产生的语言都可以用上下文无关文法来描述。

( )20.一个优先表一定存在相应的优先函数。

( )21.3型文法一定是2型文法。

( )22.如果一个文法存在某个句子对应两棵不同的语法树,则文法是二义性的。

( )二、填空题:1.( 最右推导 )称为规范推导。

2.编译过程可分为(词法分析),(语法分析),(语义分析和中间代码生成),(代码优化)和(目标代码生成)五个阶段。

3.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是()。

4.从功能上说,程序语言的语句大体可分为()语句和()语句两大类。

5.语法分析器的输入是(),其输出是()。

6.扫描器的任务是从()中识别出一个个()。

编译原理考试试题和答案(汇总)

编译原理考试试题和答案(汇总)

《编译原理》考试试题及答案(汇总)一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)1.编译程序是对高级语言程序的解释执行。

(× )2.一个有限状态自动机中,有且仅有一个唯一的终态。

(×)3.一个算符优先文法可能不存在算符优先函数与之对应。

(√ )4.语法分析时必须先消除文法中的左递归。

(×)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。

(√)6.逆波兰表示法表示表达式时无须使用括号。

(√ )7.静态数组的存储空间可以在编译时确定。

(×)8.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。

(×) 9.两个正规集相等的必要条件是他们对应的正规式等价。

(× )10.一个语义子程序描述了一个文法所对应的翻译工作。

(×)二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分) 1.词法分析器的输出结果是_____。

A.( ) 单词的种别编码B.( ) 单词在符号表中的位置C.( ) 单词的种别编码和自身值D.( ) 单词自身值2.正规式M 1 和M 2 等价是指_____。

A.( ) M1和M2的状态数相等B.( ) M1和M2的有向边条数相等C.( ) M1和M2所识别的语言集相等D.( ) M1和M2状态数和有向边条数相等3.文法G:S→xSx|y所识别的语言是_____。

A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx*4.如果文法G是无二义的,则它的任何句子α_____。

A.( )最左推导和最右推导对应的语法树必定相同B.( ) 最左推导和最右推导对应的语法树可能不同C.( ) 最左推导和最右推导必定相同D.( )可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握______。

编译原理考试题及答案

编译原理考试题及答案

编译原理考试题及答案一、选择题(每题5分,共20分)1. 编译器的主要功能是什么?A. 代码优化B. 代码翻译C. 代码调试D. 代码运行答案:B2. 下列哪个选项不属于编译器的前端部分?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D3. 在编译原理中,文法的产生式通常表示为:A. A -> αB. A -> βC. A -> γD. A -> δ答案:A4. 下列哪个算法用于构建语法分析树?A. LL(1)分析B. LR(1)分析C. SLR(1)分析D. LALR(1)分析答案:A二、填空题(每空5分,共20分)1. 编译器的前端通常包括词法分析、语法分析和________。

答案:语义分析2. 编译器的后端主要负责________和目标代码生成。

答案:代码优化3. 编译器中的词法分析器通常使用________算法来识别单词。

答案:有限自动机4. 语法分析中,________分析是一种自顶向下的分析方法。

答案:递归下降三、简答题(每题10分,共30分)1. 简述编译器的作用。

答案:编译器的主要作用是将高级语言编写的源代码转换成计算机能够理解的低级语言或机器代码,以便执行。

2. 解释一下什么是语法制导翻译。

答案:语法制导翻译是一种翻译技术,它利用源语言的语法信息来指导翻译过程,使得翻译过程能够更好地理解源代码的语义。

3. 什么是词法分析器?答案:词法分析器是编译器前端的一部分,它的任务是将源代码文本分解成一系列的标记(tokens),这些标记是源代码的最小有意义的单位。

四、计算题(每题10分,共30分)1. 给定一个简单的文法G(E):E → E + T | TT → T * F | FF → (E) | id请计算文法的非终结符号E的FIRST集和FOLLOW集。

答案:E的FIRST集为{(, id},FOLLOW集为{), +, $}。

2. 假设编译器在进行语法分析时,遇到一个语法错误的代码片段,请简述编译器如何处理这种情况。

编译原理试题及答案

编译原理试题及答案

编译原理试题及答案1. 选择题(每题4分,共40分)1) 当编译器在词法分析阶段遇到无法识别的字符时,应该采取的动作是:A. 直接忽略该字符并继续进行词法分析B. 输出错误信息并终止词法分析过程C. 将该字符标记为非法字符并继续词法分析D. 转交给语法分析器进行处理答案:B2) 下列关于语法分析器的描述中,错误的是:A. 语法分析器使用文法规则将输入的记号流转化为推导树B. 语法分析器可以通过自上而下或自下而上的方式进行解析C. LL(1)文法是一种常用于自上而下语法分析的文法形式D. 语法分析器的输入是词法分析器输出的记号流答案:A3) 以下关于语法制导翻译的说法,正确的是:A. 语法制导翻译是在语义分析阶段完成的B. 语法制导翻译通过产生式的属性传递进行信息的传递和计算C. 语法制导翻译只能用于自上而下的语法分析D. 语法制导翻译是在语法分析阶段完成的答案:B4) 在SLR分析算法中,项目集簇的构造过程中需要进行的操作是:A. 闭包操作和移进操作B. 移进操作和规约操作C. 闭包操作和规约操作D. 闭包操作、移进操作和规约操作答案:D5) 下列关于中间代码生成的叙述中,错误的是:A. 中间代码是一种类似于汇编代码的表示形式B. 中间代码可以直接被目标代码生成器所使用C. 中间代码的生成可以采用三地址码的形式D. 中间代码的生成在语法分析和语义分析之后进行答案:B2. 简答题(每题10分,共30分)1) 请简要描述编译器的主要工作流程。

答案:编译器的主要工作流程包括词法分析、语法分析、语义分析、中间代码生成、优化和目标代码生成等阶段。

在词法分析阶段,编译器将输入的源代码转化为一个个记号流。

接下来,在语法分析阶段,编译器使用文法规则对记号流进行分析,并生成语法树或推导树。

在语义分析阶段,编译器对语法树进行语义检查,并进行类型推导和符号表管理等操作。

中间代码生成阶段将经过语义分析的源代码转化为一种中间表示形式,通常是三地址码。

东南大学编译原理试题

东南大学编译原理试题

东南大学编译原理试题东南大学一九九三年攻读硕士学位研究生入学考试试题试题编号:553试题名称:编译原理一:(15分)判断下列命题的真假,并简述理由:1.文法G的一个句子对应于多个推导,则G是二义的.2.LL(1)分析必须对原有文法提取左因子和消除左递归.3.算符优先分析法采用"移近-归约"技术,其归约过程是规范的.4.文法S→aA;A→Ab;A→b是LR(0)文法(S为文法的开始符号).5.一个BASIC解释程序和编译程序的不同在于,解释程序由语法制导翻译成目标代码并立即执行之,而编译程序需产生中间代码及优化.二:(15分)设计一个最小状态有穷自动机,识别由下列子串组成的任意字符串. GO,GOTO,TOO,ON例如:GOTOONGOTOOGOON是合法字符串.三:(15分)构造一个LL(1)文法G,识别语言L:L={ω|ω为{0,1}上不包括两个相邻的1的非空串}并证明你的结论.四:(20分)设有一台单累加器计算机,并汇编语言含有通常的汇编指令LOAD,STORE,ADD和MUL.1.写一个递归下降分析程序,将如下文法所定义的赋值语句翻译成汇编语言:A→i:=EE→E+E|E*E|(E)|i2.利用加,乘法满足交换率这一性质,改进你的分析程序,以期产生比较高效的目标代码.五:(15分)C为大家熟知的程序语言.1.C的参数传递采用传值的方式,而且允许函数定义和调用时的参数个数不一致(如printf).请指出其函数调用语句:f(arg1,arg2,...,argn)翻译成的中间代码序列,并简述其含义.2.C语言中的变量具有不同的作用范围,试述C应采用的存储分配策略.六:(20分)设有一个子程序的四元式序列为:(1) I:=1(2) if I>20 GOTO (16)(3) T1:=2*J(4) T2:=20*I(5) T3:=T1+T2(6) T4:=addr(A)-22(7) T5:=2*I(8) T6:=T5*20(9) T7:=2*J(10) T8:=T6+T7(11) T9:=addr(A)-22(12) T10:=T9[T8](13) T4[T3]:=T10+J(14) I:=I+1(15) goto (2)(16) ret1.分划基本块.2.对代码施行各种可能的优化,并写出优化过程中采用了何种优化策略.________________________________________________________________ _______________ 东南大学一九九四年攻读硕士学位研究生入学考试试题试题编号:553试题名称:编译原理一:由文法G1构造LR(1)部分分析表:1.列出4个项目集I0,I1,I2,I3;(如下图)2.填写LR(1)分析表的状态0,1,2的action和goto表的内容.(如下图)G1: (0) S→T(1) T→T(T)(2) T→ε┌──────┐┌──┐┌──┐┌──┐│I0:S→·T,# │T │I1: │ (│I2: │ T│I3: │││ -→││-→ ││-→ ││└──────┘└──┘└──┘└──┘┌──┬────────┬───┐││action │ goto ││状态├──┬──┬──┼───┤││ (│ )│ #│ T │├──┼──┼──┼──┼───┤│ 0│││││├──┼──┼──┼──┼───┤│ 1│││││├──┼──┼──┼──┼───┤│ 2│││││├──┼──┴──┴──┼───┤│││││... │ ... │ ...│││││└──┴────────┴───┘二:已知文法G2,请用类pascal语言写出它的递归下降分析程序.G2: A→[BB→X]|BAX→Xa|Xb|a|b三:已知文法G3,要求:1.写出各非终极符的首终极符集合和尾终极符集合;2.填写opt表:│+ │* │@ │ ↑ │i │# │──┼──┼──┼──┼──┼──┼──┤+ │││││││──┼──┼──┼──┼──┼──┼──┤* │││││││──┼──┼──┼──┼──┼──┼──┤@ │││││││──┼──┼──┼──┼──┼──┼──┤↑│││││││──┼──┼──┼──┼──┼──┼──┤i │││││││──┼──┼──┼──┼──┼──┼──┤# │││││││──┼──┼──┼──┼──┼──┼──┤│││││││G3: E→E+T|T|@TT→T*F|FF→p↑F|Pp→i四:请写出产生下列语言的文法.1. L1={a^ib^j|i>j>=1}2. L2={ω1|ω1?{0,1}*&ω1中包含0,1个数相等的任意串}3. L3={ω2|ω2?{a,b}*&ω2中a之后必定跟b}4. L4={ω3+ω3|ω3?{0,1}*}五:简要回答问题.1.对编译程序而言,模块,遍,子程序这三个概念的主要区别?2.静态存储分配与动态存储分配的主要区别?3.何谓自适应线性表?六:翻译如下布尔表达式成四元式序列,结果留待填的真假链的四元式序号.A∧B-C<d+e∨┐f< p="">________________________________________________________________ _____东南大学一九九五年攻读硕士学位研究生入学考试试题试题编号:553试题名称:编译原理一:按算法构造文法G1:S→#M#M→(L|aL→M,a)的算符优先矩阵.(即填写下列矩阵)│ a │, │( │) │# │──┼──┼──┼──┼──┼──┼a ││││││──┼──┼──┼──┼──┼──┼, ││││││──┼──┼──┼──┼──┼──┼( ││││││──┼──┼──┼──┼──┼──┼) ││││││──┼──┼──┼──┼──┼──┼# ││││││──┼──┼──┼──┼──┼──┼二:将下列cfg文法修改成正规文法.S→ABA→M|N|PB→aB|aM→bM|bN→cN|cP→αP|ε三:已知文法G2:(1) S'→S(2) S→AAA(3) S→1A(4) S→01.列出LR(0)项目集族;2.构造SLR分析表;3.试给处语句01100#的LR分析过程.四:1.构造由下列三型文法G3所对应的FA.2.将构造的FA确定化和最小化.3.写出该DFA所识别的语言.G3: S→aA|bS|dCA→dEC→aD|bC|bD→bE|bE→aD|bE|b五:设有源语句A[I+1,J+2]:=A[B[K+2],5]1.列出计算两个数组的下标地址(按行存放)A[I+1,J+2]的地址D1=?B[K+2]的地址D2=?2.按语法制导翻译该语句成四元式序列.(设数组首地址分别为a,b;数组按行存放,每个元素占一字编址.数组说明:A:array[1..10,-5..5],B:array[-5..5]) 六:求文法G4:A→BCc|gDBB→bcDE|εC→Dab|caD→dD|εE→gAf|c的各非终结符的随符集.七:1.简述由基本块寻找循环结点的算法.2.对于如下一段程序,若参数传递分别采用:(a)传名 (b)传结果 (c)传地址试问程序执行结果,Y值是什么?proc Q(B,C)beginB:=B+2;B:=B*Cend;beginY:=2;Q(Y,2*Y);print(Y)end;3.文法G5:E→P↑E|PP→P*Q|QQ→Q+R|RR→(E)|aa→整常数试给出下列表达式计值结果(语法制导).3+2*5↑2*2+32+(2↑2↑3)*2+3________________________________________________________________ _____ 东南大学一九九六年攻读硕士学位研究生入学考试试题试题编号:553试题名称:编译原理一:1.试写一正规文法,使其定义的语言是不以0打头的偶整数集合.其中数字可以用简名表示,比如α1→0|2|4|6|8,并把α1看作是终结符.2.试写一上下文无关文法,它能产生下列语言:L={ω|ω?{a,b}*,且ω中a的个数是b的两倍,例如aab等}二:请写出由下列文法所确定的语言.1. G1: S→10S01S→aAA→bAA→a2. G2: S→aSSS→a三:已知NFA的状态转换图如下,试对它确定化并化简,并写出该FA 接受的语言.∩b a→S──────→Ad││c↓ a b ↓b<C──→D──→E>b│b│←──│b│↓ a │b└─→T ←──┘四:已知文法G4:S'→SS→ASS→bA→SAA→a1.试求closure({(S'→·S,#)})和GO(closure({(S'→·S,#)}),S)2.文法是LR(1)吗?为什么?五:试将下面语句按语法制导翻译成四元式序列.while (a<="" p="">if a=1 then c:=c+1else while a<=d do a:=a+2;六:1.试对如下四元式序列划分成基本块,并化出程序流图;2.写出源语句.(1) I:=1(2) if I>M goto (19)(3) J:=1(4) if J>N goto (17)(5) T1:=I*N(6) T2:=T1+J(7) T3:=addr(A)-C(8) T4:=I*2(9) T5:=J+2(10) T6:=T4*N(11) T7:=T6+T5(12) T8:=addr(A)-C(13) T9:=T8[T7](14) T3[T2]:=T9(15) J:=J+1(16) goto (4)(17) I:=I+1(18) goto (2)(19) ...七:1.求文法G7的各非终结符的终结首符集First和随符集Follow.2.判定该文法是LL(1)吗?G7: A→BCc|gDBB→bCDE|εC→DaB|caD→dD|εE→gAf|c________________________________________________________________ _____东南大学一九九七年攻读硕士学位研究生入学考试试题试题编号:553试题名称:编译原理一:文法G1:E→ET+|TT→TF*|FF→FP↑|PP→E|i1.试证明符号串TET+*i↑是G1的一个句型(要求画出语法树).2.写出该句型的所有短语,简单短句和句柄.二:1.给出下图FA的正规式.a b──→──→ ②→◎①a↑↓ε←──←── ③ε b2.已知正规文法G2:S→aS|AA→bBB→aB|ε试构造一确定有限自动机DFA(要求化简),使得它接受的语言正是该文法产生的语言,要求画出状态图.三:1.试写出一个上下文无关文法G3,它能产生配对的圆括号串(例如,(),(()),()(())等,甚至包含0对括号).2.使用文法G3给出输入串(())()#的自上而下分析过程.四:已知文法G4:S→aAb|Sc|εA→aAb|ε1.给出G4文法的LR(0)项目集规范族;2.构造SLR分析表;3.G4文法所定义的语言;4.已知有如下文法及相应的LR分析表,试给出语句01001#的LR 分析过程(填写下表).S→AAAA→1AA→0LR分析表:───┬──┬──┬──┰──┬──状态│ 1│ 0│ #┃ S│ A───┼──┼──┼──╂──┼──0 │ S3 │ S4 │┃ 1│ 2───┼──┼──┼──╂──┼──1 │││acc ┃│───┼──┼──┼──╂──┼──2 │ S3 │ S4 │┃│ 5───┼──┼──┼──╂──┼──3 │ S3 │ S4 │┃│ 6───┼──┼──┼──╂──┼──4 │ r3 │ r3 │ r3 ┃│───┼──┼──┼──╂──┼──5 │ S3 │ S4 │┃│ 7───┼──┼──┼──╂──┼──6 │ r2 │ r2 │ r2 ┃│───┼──┼──┼──╂──┼──7 │││ r1 ┃│───┴──┴──┴──┸──┴──分析过程:──────┬──────┬──────状态栈│符号栈│输入串──────┼──────┼──────││││││││││││││──────┴──────┴──────五:1.翻译下面语句成四元式中间代码序列和后缀式(逆波兰式);while x+y>a doif a<10 then a:=a+1 else x:=x-1;2.翻译布尔表达式(a>b) or (c=d) and not (e<f)< p="">成转移四元式序列(即四元式中仅包含(zθ,-,-,-)和(j,-,-,-)两类语句,其中θ为关系运算符.)六:1.有如下Fortran说明语句,试借助符号表登记等价环链EQ和相对数OFFSET,即填写下表的EQ栏和OFFSET栏.设每个整型量占1子编址.integer a,b,c(10,10),d(10)equivalence (a,d(8),c(5,5))equivalence (b,c(5,8))符号表┌───┬──────┬───┬───┐│ name │ ... │ EQ │OFFSET│├───┼──────┼───┼───┤1│ a │ ... │││├───┼──────┼───┼───┤2│ b │ ... │││├───┼──────┼───┼───┤3│ c │ ... │││├───┼──────┼───┼───┤4│ d │ ... │││└───┴──────┴───┴───┘2.有如下pascal语言的程序轮廓,当运行该程序且第一次递归调用Q过程(即在过程Q中又调用了Q)时,数据区建立情况.假定各数据区首址用SP(i)(i=0,1,……)表示,试给出P,Q数据区的display表.┌ main│┌ P││┌ Q│││ Call Q││└││ Call Q│└│┌ R││ Call P│└│┌ S││ Call R│└│ Call S└七:已知如下流图,试给出回边与循环.↓┌─→①←┐│/ \ /│ ↓↓/\ ②③\ \ /↑\↓↓/┌→④──┐││↓││┌→⑤│↓/ │└─⑥←─┘________________________________________________________________ _____ 东南大学一九九八年攻读硕士学位研究生入学考试试题试题编号:553试题名称:编译原理一:已知文法G1:S→aB|εB→bC|bDC→cB|cD→d1.试构造一个最小DFA,画出状态转换图.2.由该DFA给出它所识别的语言(用正规式表示).二:已知正规式α=ab*c*d,1.试构造一个DFAM,其接受的语言为此α(画出图);2.由该DFAM写出对应的正规文法(古线性).三:文法G3:S→A[B]A→[B]|AaB→a1.求出各非终结符N的Firstvt(N)和Lastvt(N),构造包括语句括号'#'在内的算符优先表;2.给出语句#[a][a]#的算符优先分析过程,即填写如下格式的表:步骤│栈内│ 输入串│动作────┼────┼────┼─────0 │#│[a][a]# │... │││四:已知文法G4:T→T*F|FF→(T)|i1.试给出语句(i*i)#的自上而下分析过程(填下表);2.画出对应的语法树,指出每一步归纳的句柄.步骤│栈内│输入│动作────┼────┼────┼─────0 │#T│ (i*i)# │... │││五:已知文法G5:0. E'→E1. E→E+T2. E→T3. T→i列出LR(0)项目集规范族,求出各非终结符N的Follow集合,构造SLR分析表. 六:翻译如下语句成四元式序列(由语法制导生成).while a>b and a<="" p="">if a=5 then b:=b+1 elserepeata:=a+1until a>=d;七:按语法制导翻译下段程序成四元式序列(不要优化),设数组A:array[1..10,1..10] of int;每个下标变量占1字编址,数组按行存放,Z 为函数名.beginA[i,j]:=A[i,j]+2;B:=Z(A[i,j])*5end八:将如下一段四元式序列进行块内优化和循环优化(强度减弱及删除基本归纳变量),写出优化后的四元式序列.(要求先划分基本块)(1) i:=1(2) if i>100 goto (10)(3) T1:=20*i(4) M:=J+T1(5) T2:=20*i(6) N:=K+T2(7) O:=M+N(8) i:=i+1(9) goto (2)(10) ...九:已知如下一段程序,试给出运行时整个数据区结构.假定num初值为2,每个数据区的活动记录包含内容如下图所示,数据区从k单元开始编址.┌─────┐ program factoral;│函数返回值│ var num,fact:int;├─────┤ function f(n:int):int│ 变量单元│ if n>0 then f:=n*f(n-1)├─────┤ else f:=1;│display 表│ begin├─────┤ read(num);│ 形参单元│ fact:=f(num)├─────┤ end│ 返回地址│├─────┤│基SP │└─────┘________________________________________________________________ _____东南大学一九九九年攻读硕士学位研究生入学考试试题试题编号:553试题名称:编译原理一:已知正规文法中的左线性文法G1:S→Sa|Sb|c试构造无ε产生式的等价右线性文法,并构造相应的确定有限自动机DFA,画出状态转换图即可.二:已知正规文法(X为开始符号)G2: X→0Y|1Z|0Y→0X|1Y|1Z→1X1.该文法产生语言是什么?请用正规式表示.2.构造最简的确定有限自动机DFA,并画出状态转换图.三:已知上下文无关文法(E为开始符号)G3: E→ET+|TT→TF*|FF→E|i1.消除文法左递归,并给出改写后的文法产生式;2.给出文法改写以后的各非终结符X的First(X)与Follow(X)集合,并由此判定它是否是LL(1)文法(按下表填).V(N) │ First(X) │ Follow(X)────┼──────┼───────X ││... ││││四:已知表达式文法(已拓广)G4: E'→EE→E+E|i1.试构造文法G4的LR(0)项目集规范族;2.若'+'服从右结合率,请给出LR分析表.五:已知文法(Z为开始符号)G5: Z→bMbM→(Ma)|a1.试构造算符优先分析表(即填下表);│ a │ b │( │) │# │──┼──┼──┼──┼──┼──┼a ││││││──┼──┼──┼──┼──┼──┼b ││││││──┼──┼──┼──┼──┼──┼( ││││││──┼──┼──┼──┼──┼──┼) ││││││──┼──┼──┼──┼──┼──┼# ││││││──┼──┼──┼──┼──┼──┼2.若某相邻的终结符a,b间存在a<=b两种关系,那么在进行算符优先分析做归约动作时,在寻找栈顶的素短语符号串时要察看它与哪个产生式右部的符号串匹配. 例如栈顶串...aAbα(a,b?VT,A?(VA∪ε),a<=b,α?V*)为已知可归约,而现有产生式X→aAbα,则取素短语aAbα,若只有产生式Y→Abα,那么就取Abα进行归约.试按此规定的算法给出语句b((aa)a)b的算符优先分析过程.六:翻译成中间代码.1.将如下程序段翻译成后缀式(逆波兰式),填在一维数组POST[i]中,设i初值=1. t:=15;b:=20;while t<>b doif t>b then t:=t-belse b:=b-t;2.翻译布尔表达式成转移四元式序列,并指出待填真假链序号.(a>b+1) and not (c+2<="" or="" p="">注:f(x)为布尔函数.七:有如下一个计算m*2^n的C语言程序,试给出运行时整个栈或数据区的结构.数据区的活动记录结构如图所示.┌──────┐┌─────┐│函数f返回值││返回结果值│├──────┤├─────┤│ 局部变量区││局部变量区│├──────┤├─────┤│ 全程变量区││形参单元区│├──────┤├─────┤│主程序m ain ││ 返回地址││ 数据区│├─────┤└──────┘│基SP │├─────┤│函数数据区│└─────┘int m;f(n)int n;{ int c;if (n==0) c=m;else c=f(n-1)*2;return (c);}main(){ int n=2;m=5;printf("%d\n",f(n));}八:已知如下程序段a:=1;while a<=10 dobeginif a<>b thenA[a,b]:=A[a,b]+2;a:=a+1;end;1.按语法制导生成四元式中间代码序列;2.将中间代码序列划分成基本块,画出程序流图,并指出循环结点集;3.执行循环中代码外提,强度减弱优化和基本块内删除公共子表达式优化,最后画出包含优化后的中间代码的程序流图.注:数组A: array[1..10,1..10] of int;按行存放,每个下标变量占1字编址,首地址为addrA.友情赠送--东南大学计算机系编译原理期末考试试题两套!________________________________________________________________ _____东南大学试题纸课程: 编译原理 1997-1998学年第一学期一:1.试给出产生L1语言的相应预测分析文法.L1={a^ib^j|j>i>0}2.设文法G1: S→aA A→bA|a试给出文法G1所定义的语言,并用正规式表示.二:1.设文法G2如下,试给出G2文法中各非终结符的First与Follow,即填写下表. G2: A→BCc|gDBB→bCDE|εC→DaB|caD→dD|εE→gAF|c│ First │ Follow────┼──────┼───────A ││B ││C ││D ││E ││────┴──────┴───────2.构造G2文法的预测分析表.│ a│ b│ c│ d│ f│ g│ #────┼──┼──┼──┼──┼──┼──┼───A │││││││B │││││││C │││││││D │││││││E │││││││────┴──┴──┴──┴──┴──┴──┴───三:设正规文法如下,1.构造相应的NFA,画出状态转换图.2.将NFA确定化与最小化,画出最小DFA状态转换图.S→aA|bS|dCA→dEC→aD|bC|bD→bE|bE→aD|bE|b四:构造文法G4:S→#M#M→(M,a)|a的算符优先分析表(按a,,,(,),#顺序列出);并给出语句((a,a),a)#的算符优先分析过程.五:1.构造已拓广文法G5的LR(0)项目集规范族;G50) S'→S(1) S→BB(2) B→a B(3) B→b2.构造G5文法的SLR分析表;3.该文法是LR(0)吗?为什么?六:1.令F(x,y)为一函数过程,试写出过程调用语句:F(F(A+B,C)+D,E)的四元式中间代码序列.2.设数组A:array[1..10,-5..5],B:array[-5..5],数组按行存放,每个元素占1字编址,其首地址分别为1000和2000.试翻译赋值语句A[I+1,J+2]:=A[B[K+2],5]成四元式序列.3.计算A[5,2]和B的内存地址.七:设有如下pascal程序,在运行时数据区随调用语句而建立,当过程(程序)结束时撤销数据区.试写出最后一次调用fib时刻的整个数据区结构.假定在活动记录中不设全局display与形参个数这二项,其它按书上规定.整个数据区从k单元开始分配.所谓最后一次调用fib试制从那时刻之后只有撤销数据区动作.program fibonacci;var m:integer;function fib(n:int):int;if n=0 then fib:=0else if n=1 then fib:=1else fib:=fib(n-2)+fib(n-1);beginm:=3;write (fib(m))end八:试对如下四元式序列进行强度减弱优化.要求先画出程序流图,对循环体作强度减弱优化.I:=1read J,KL:A:=K*IB:=J*IC:=A*Bwrite CI:=I+1if I<100 goto Lhalt________________________________________________________________ _____东南大学试题纸课程: 编译原理 1998-1999学年第一学期一:构造正规式 (-|ε)(a|b)*ab 相应的DFA.先构造NFA,确定化,最小化,最后画出最小DFA状态转换图.二:已知状态转换图如下,试给出相应的右线性文法和相应正规表达式Re.b ∩a c┌────→A←────┐→S b└────→B←┐a└────────────┘三:设文法G3A'→AA→a|aAc|bBcB→aA|bB1.消除左递归和/或提取左因子,写出改写后的文法G3';2.给出改写后的文法G3'的First(x)与Follow(x),x为非终结符;3.构造G3'的LL(1)分析表.四:已知文法G4S→a|(T)T→T,S|S1.给出文法G4的算符优先表.2.将该优先表用逐次加1法转换成优先函数.│ a │( │) │, │# │──┼──┼──┼──┼──┼──┼a ││││││──┼──┼──┼──┼──┼──┼( ││││││──┼──┼──┼──┼──┼──┼) ││││││──┼──┼──┼──┼──┼──┼, ││││││──┼──┼──┼──┼──┼──┼# ││││││──┼──┼──┼──┼──┼──┼│ a │( │) │, │# │──┼──┼──┼──┼──┼──┼f ││││││──┼──┼──┼──┼──┼──┼g ││││││──┼──┼──┼──┼──┼──┼五:已知文法G5T→T(T)T→ε1.构造G5文法的LR(0)项目集规范族(要求先拓广);2.构造G5文法的SLR分析表;3.给出句子(())#的LR分析过程.六:将布尔表达式A>B+1∧┐(D∨E)1.按逻辑演算中求布尔值译成四元式序列;2.翻译成转移四元式序列;七:1.将如下程序段译成四元式中间代码序列,设每个下表变量占4字编址,数组首地址为a.i:=0;repeatif i>2 then A[i]:=A[i]*2;i:=i+1until i>10;2.将译成的中间代码划分成基本块,画出程序流图,并指出循环结点.八:对如下pascal程序试给出运行时整个数据区,并标出各数据区建立的先后顺序.设m=3,每个数据区的活动记录包含:Top→┌─────┐│函数返回值│├─────┤│ 变量单元│├─────┤│disp lay 表│├─────┤│ 形参单元│├─────┤│ 返回地址│├─────┤│基SP │Sp→ └─────┘program fibonacci; var m:int;function fib(n:int):int; </f)<></d+e∨┐f<>。

编译原理考试题及答案

编译原理考试题及答案

编译原理考试题及答案一、选择题(每题2分,共10分)1. 在编译原理中,词法分析器的主要任务是什么?A. 将源代码转换为中间代码B. 识别源代码中的词法单元C. 进行语法分析D. 优化代码答案:B2. 下列哪个选项不是编译器的组成部分?A. 词法分析器B. 语法分析器C. 运行时环境D. 语义分析器答案:C3. 编译器的哪个阶段负责检查变量是否已经声明?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:C4. 在编译原理中,哪些技术常用于错误恢复?A. 预测分析表和LR分析B. 递归下降分析和LR分析C. 预测分析表和递归下降分析D. 预测分析表和错误恢复算法答案:D5. 编译器中用于优化代码的阶段是哪一个?A. 词法分析B. 语法分析C. 语义分析D. 代码优化答案:D二、填空题(每题2分,共10分)1. 编译器的前端包括词法分析、语法分析和________。

答案:语义分析2. 在编译过程中,________分析器负责将源代码的逻辑结构转换为一种内部表示形式。

答案:语法3. 编译器的后端包括________、寄存器分配和代码生成。

答案:中间代码生成4. 编译器中的________分析用于检查程序中的类型错误。

答案:语义5. 编译器的________阶段负责将高级语言代码转换为目标机器代码。

答案:代码生成三、简答题(每题10分,共20分)1. 简述编译器的主要功能。

答案:编译器的主要功能包括将高级语言编写的源代码转换成目标机器可以执行的机器代码,同时进行错误检测、代码优化等。

它通常包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等阶段。

2. 描述编译过程中的语法分析阶段的主要任务。

答案:语法分析阶段的主要任务是检查源代码是否符合语言的语法规则,构建抽象语法树(AST),并进行语法制导的语义分析。

这一阶段使用诸如自顶向下的递归下降分析、自底向上的移进-规约分析等技术来识别语言结构,并为后续的语义分析和代码生成打下基础。

精编中科大编译原理和操作系统研究生考试试卷

精编中科大编译原理和操作系统研究生考试试卷

中国科学技术大学一九九一年招收硕士学位研究生入学考试试题试题名称:编译原理和操作系统编译原理部分(50分)一.填空(10分)1.Chomsky定义的四种形式语言文法是(1)______文法(又称_____文法)(2)______文法(又称_____文法)(3)______文法(又称_____文法)(4)______文法(又称_____文法)2.程序设计语言的语法分析方法可分为两大类,____________和_____________;其中,前者采用__________分析方法;后者采用_______或_______分析方法;3.逻辑表达式的计算有_________和_________两种方式,选择哪种计算方式取决于_________________.4.在一遍扫描的编译程序中,我们必须采取________手段来解决转移目标不明确的困难.5.Lex是用于___________的工具;Yacc是用于___________的工具.6.根据连接在文法符号上的属性间的依赖关系,属性被分为____________ ,_____________互不相交的二大类.7.参数传递方式有________ , __________ , ___________等几种.二.简答题(4分)1.整数和实数的算术运算是可兼容的,为什么编译器要区分它们?2.什么是代码优化?举出至少三种用于代码优化的手段.三.下列文法是否属于LR(1),若是,则给出分析表;若不是,指出原因(分析过程中可能遇到的麻烦),并考虑能否使其成为LR(1)文法,如何做?为什么? (10分)S ? ASES | AS | fE ? Ea | EbA ? c | d四.说明Pascal语言和C语言的变量定义对编译程序实现的影响.(8分)a, b, c : integer ;AR V : 的变量说明Pascal : 例C的变量说明: int a, b, c;五.Pascal程序设计语言不允许越过父过程或函数调用其中的子过程或函数,例如:procedure Aprocedure B┇procedure Cprocedure D┇在过程D中不允许调用过程B,试解释其原因(8分).六.给出将二进制数直接翻译成十六进制数的翻译方案.假定属性hex用于存放十六进制位串,串并置采用算符‘||'.二进制数文法如下:S ? BS | BB ? 0 | 1操作系统部分(50分)一.填空(每空1分,共15分)1.操作系统的基本特征是_________和__________.2.______________是用户和外设、外存之间的接口.3.产生死锁的原因是___________和____________.4.有一个530字的程序.考虑如下访问内存的逻辑地址序列:10,11,104,107,73,526,185,245,246,309,458,364,442,247,248,434.假定页面大小为100字,则其对应的页面走向序列为:_______________________________________________________.如每个进程最多可分给300字内存空间,且采用LRU算法,则其缺页次数为________次,其缺页率为_________.5.段表中设“改变位”的目的是____________________________________.6.为了_________________________而引入多道程序设计.7.逻辑设备是___________________________________._____________________________,和___________________的作用是JCB8.它由_____________________建立.9.临界资源是__________________________________________.二.选择(四择一,每题1分,共5分)1.软件共享的必要性是为了( ).A. 节约内存空间B. 缩短运行时间C. A和CC. 减少内外存对换信息量2.请求页面存储管理采用( ).A.动态定位,静态分配,静态链接B.动态定位,动态分配,动态链接C.动态定位,动态分配,静态链接D.静态定位,静态分配,静态链接3.用户的虚拟CPU功能( ).A.和物理CPU完全一样B.可以执行所有机器指令以及软件“指令”C.不能执行特权指令D.可以执行除特权以外的机器指令以及软件“指令”4.虚拟存储管理中,段(或页)表需要( ),而快表中可以没有它.A.中断位B.引用位D.B 和 CC.改变位5.OPEN操作的目的是为了( ).A.将制定的文件记录复制到内存中B.将制定的文件复制到内存中C.将制定的文件说明复制到内存中D.将制定的共享文件复制到内存中三.判断并改正(前4题各1分,第5题6分,共10分)1.( ) 虚拟存储器空间的大小由外存容量决定.2.( ) 在生产速度和消费速度完全相同时,只要用单缓冲就可以完全并行工作.3.( ) 进程间的同步与互斥工具也是一种通讯工具.4.( ) 虚拟设备和物理设备一一对应.?a,…和一个无穷序列,n…,,甲进程序…个环形缓冲区设有5.n1,2,3,n1列顺序逐个的把信息写入环形缓冲区中,而乙进程则逐个的把缓冲区信息读出.请叙述甲、乙二进程的相互制约关系(1).(2)下列用P、V操作表示的同步算法有何错误.初值 := 0 ; := n;SS21甲进程乙进程)P( V() 11读出┇┇写入P() V()S2.、PV操作写出正确的同步算法(3)用四.(10分)1.叙述请求页面存储管理所需要的数据结构、软件支持和硬件支持.2.叙述(或加说明画出)执行一条访内指令的过程.五.(10分)P、,有二组缓冲区: 设有四个进程、、PPP3421 : 由7个缓冲区组成;: 由100个缓冲区组成.QP中送初始信息;的功能: 不断的往、12PQQ的空缓冲区中;满缓冲区的信息加工后存入的功能: 不断的取321Q满缓冲区的信息并打印不断的取. 的功能: 2请:(1)列出过程间的相互制约关系;(2)设置必要的信号量;(3)用P、V操作设计这四个进程的同步算法.)试题完(。

中科院计算所历年考研真题编译原理操作系统数据结构软件基础含答案

中科院计算所历年考研真题编译原理操作系统数据结构软件基础含答案

中科院计算所2003年考研试题第一部分编译(40’)一、(1/01)*0*说明是什么语言画出DFA(10’)二、S→过程调用语句/数组的赋值语句(10’)过程调用语句为:id(id,id,…,id)赋值语句: id(id,…,id):=id(id,…,id)(a)写一个LR(1)方法(产生式不大于6个)(b)若在LR分析同时完成语义分析,中间代码生成,基于你的文法有什么困难?三、E→E*E/+E/-E/unsigned-integer为上面表达式产生栈机器代码,代码执行后,表达式值留在栈上,自己设计所需栈机器指令,并写清指令含义。

(10’)四、C语言中,a表示数组首址,而&a也表示数组首址,然而使用时有时并不相同,请根据下面写出a与&a 类型表达式(10’)(1) tgpedef int A[10][20]A a;A * func ( ){return(a);}在linux上用gcc编译报告:第6行warning: return from incompatible pointer type(2) typedef int A[10][20]A a;A *func( ){return(&a);}无类型方面错误(3) typedef int A[10][20]typedef int B[20]A a;B *func( ){return(a);}无类型方面错误(4) typedef int A[10][20]A a;func( ){Printf(“%d,%d,%d/n,a,a+1,&a+1);}main( ){func( );}结果:134518112,134518192,134518912中科院计算机技术研究所1999年硕士生入学试题中科院计算所1999年编译原理与操作系统一.(15分)有表达式如下:A+B*(C-D)**N (**为幂乘)(1)给出该表达式的逆波兰式表示(后缀式);(2)给出上述表达式的四元式和三元式序列.三.(5分)构造一个DFA(确定的有限自动机),使之接受含偶数个"1"的0,1串集.四.(5分)有文法G,其产生式如下:S->S(S),S->ε /*空产生式*/试写出一个语法制导定义,它输出配对的括号个数.五.(10分)已知某语言L={a^(m)b^(n)|n>m>=0}.试写出产生该语言的两个文法G1和G2,其中G1是LR(1)文法,G2是非LR(1)和非二义性文法.六.填空(每空一分,共20分)中科院计算所1999年编译原理与操作系统参考答案一.(1)后缀式:ABCD-*+ECD-N**/+(2)四元式三元式(1)(-,C,D,t1)(1)(-,C,D)(2)(*,B,t1,t2)(2)(*,B,(1))(3)(+,A,t2,t3)(3)(+,A,(2))(4)(-,C,D) (4)(-,C,D,t4)(5)(**,(4),N) (5)(**,t4,N,t5)(6)(/,E,t5,t6) (6)(/,E,(5))(7)(+,t3,t6,t7) (7)(+,(3),(6))四.(5分)为符号S引入综合属性h,语法制导定义如下:产生式语义规则S->S1(S2)S.h:=S1.h+S2.h+1S->εS.h:=0S'->Sprint(S.h)/*输出其配对括号数*/五.(10分)G1:LR(1)文法G2:非LR(1),非二义性文法S->A,BS->aSb|BA->aAb|εB->Bb|bB->Bb|b六.填空1.并发,共享2.初始化标识符信息,初始化处理机状态信息,初始化处理机控制信息;3.为了减少程序并发执行时所需付出的时空开销,提高程序执行的并发度;4.forkpipemknod5.正在执行的进程时间片完;正在执行的进程执行了sleep系统调用;正在执行的进程执行了exit系统调用;正在执行的进程在用户态运行时有优先级更高的进程进入就绪队列6.中低地址,高地址7.设备控制表,控制器控制表,通道控制表,系统设备表8.只让文件主拥有指向该文件索引结点的指针,而共享该文件的其他用户只有该文件的路径明而不是指向索引结点的指针.中科院98考研题中科院计算所1998年编译原理和操作系统一.(10分)某操作系统下合法的文件名为device:name.extension ,其中第一部分(device:)和第三部分(.extension)可缺省,若device,name和extension都是字母串,长度不限,但至少为1,画出实现这种文件名的确定有限自动机.二.(10分)下面的二义文法描述命题演算公式,为他写一个等价的非二义文法.S->S and S|S or S|not S|p|q|(S)三.(10分)把表达式- (a+b)*(c+d)+(a+b+c) 翻译成四元式.四.(10分)由于文法二义引起的LR(1)分析动作冲突,可以根据消除二义的规则而得到LR(1)分析表,根据此表可以正确识别输入串是否为响应语言的句子.对于非二义非LR(1)文法引起的LR(1)分析动作的冲突,是否也可以根据什么规则来消除LR(1)分析动作的冲突而得到LR(1)分析表,并且根据此表识别相应语言的句子?若可以,你是否可以给出这样的规则?五.(10分)下面程序的结果是120.但是如果把第5行的abs(1)改成1的话,则程序结果为1.试分析为什么会有这不同的结果.int fact(){static int i=5;if(i=0) {return(1); }else { i=i-1; return(( i+abs(1))*fact()); }}main(){printf("factor or 5=%d\n",fact());}中国科学院计算所1997年编译原理试题(共25分)1.(10分) 为正规式(a|b)*a(a|b)构造一个确定的有限自动机。

编译原理考试题及答案

编译原理考试题及答案

编译原理考试题及答案一、选择题(每题2分,共20分)1. 编译器的主要功能是将高级语言源程序转换成机器语言目标程序。

(对/错)答案:对2. 编译过程中,词法分析器的主要任务是识别源程序中的各种词法单位。

(对/错)答案:对3. 在语法分析阶段,编译器使用的数据结构是栈。

(对/错)答案:错4. 语义分析的主要目的是检查程序的语法结构是否正确。

(对/错)答案:错5. 编译器的优化阶段可以提高目标程序的执行效率。

(对/错)答案:对6. 编译器的代码生成阶段负责将中间代码转换为目标代码。

(对/错)答案:对7. 编译器的运行时系统包括内存管理、输入输出处理等功能。

(对/错)答案:对8. 编译器的前端主要负责源程序的分析,后端负责目标代码的生成。

(对/错)答案:对9. 编译器的词法分析阶段不涉及对标识符的识别。

(对/错)答案:错10. 编译器的语法分析阶段可以识别出所有的语法错误。

(对/错)答案:对二、填空题(每题2分,共20分)1. 编译器在进行语法分析时,通常采用________算法。

答案:LL(1)或LR(1)2. 编译器在语义分析阶段,需要对变量的________进行检查。

答案:作用域和生命周期3. 编译器在代码优化阶段,常用的优化技术包括________和循环优化。

答案:常量传播4. 编译器在目标代码生成阶段,需要考虑________的约束。

答案:目标机器5. 编译器的运行时系统包括________、内存管理、输入输出处理等。

答案:程序启动和异常处理6. 编译器在词法分析阶段,需要识别的词法单位包括________、标识符、常量等。

答案:关键字7. 编译器在语法分析阶段,使用的分析表可以是________表或ACTION 表。

答案:GOTO8. 编译器在语义分析阶段,需要对表达式的________进行计算。

答案:类型9. 编译器的代码生成阶段,需要将中间代码转换为________代码。

答案:目标机器10. 编译器的运行时系统在内存管理中,需要处理________和垃圾收集。

杭电-编译原理样卷二及答案

杭电-编译原理样卷二及答案

试卷(二):一、选择1.下面说法正确的是:BA 一个正规式只能对应一个确定的有限状态自动机;B 一个正规语言可能对应多个正规文法;2.算符优先分析与规范归约相比的优点是:AA 归约速度快B 对文法限制少3.一个LR(1)文法合并同心集后若不是LALR(1)文法:BA 则可能存在移进/归约冲突B 则可能存在归约/归约冲突C 则可能存在移进/归约冲突和归约/归约冲突4.下面说法正确的是:AA Lex是一个词法分析器的生成器B Yacc是一个语法分析器二、问答题问答第1题(5分) 将文法G[S] 改写为等价的G'[S],使G'[S]不含左递归和左公共因子。

G[S]:S→SAe|AeA→dAbA|dA|d解:文法G[S] 改写为等价的不含左递归和左公共因子的G'[S]为:S →AeS'S' →AeS'|εA →dA'A' →AB|εB →bA |ε问答第2题(10分) 判断下面文法是否为LL(1)文法,若是,请构造相应的LL(1)分析表。

S→aDD→STe|εT→bH|HH→d|ε首先计算文法的FIRST集和FOLLOW集如下表。

文法的FIRST集和FOLLOW集非终结符FIRST集FOLLOW集S {a}{#,b,d,e}D {a,ε}{#,b,d,e }T {b,d,ε} {e}H {d,ε}{e}由于select(D→STe)∩select(D→ε)={a}∩{# ,b ,d ,e }=select(T→bH)∩select(T→H)={b}∩{e }=select(H→d)∩select(H→ε)={ d }∩{ e }=所以该文法是LL(1)文法,LL(1)分析表如下表。

LL(1)分析表a eb d #S →aDD →STe →ε →ε →ε →εT →H→bH →HH →ε →d问答第3题(5分) 给出与正规式R=((ab)*|b)*(a|(ba)*)a 等价的NFA。

2024年考研计算机科学编译原理与技术历年真题

2024年考研计算机科学编译原理与技术历年真题

2024年考研计算机科学编译原理与技术历年真题2024年考研计算机科学编译原理与技术真题回顾编译原理与技术作为计算机科学考研的重要科目之一,对于考生来说是需要认真准备和熟悉的。

本文将回顾和分析2024年考研计算机科学编译原理与技术的历年真题,帮助考生们更好地了解考试内容和备考重点。

一、选择题1. 编译原理与技术主要关注的是()。

A. 程序编写的方法和技巧B. 如何学习计算机科学C. 程序的语法规则和语义分析D. 程序员的日常工作2. 在编译原理中,抽象语法树(AST)主要用来表示()。

A. 用户输入的程序B. 程序中的变量C. 程序的语法结构D. 程序的输出结果3. 下面不属于编译原理中的前端任务的是()。

A. 词法分析B. 语法分析C. 语义分析D. 代码生成4. 符号表在编译过程中主要用于()。

A. 存储程序的源代码B. 存储程序中变量的类型和值C. 存储程序的中间代码D. 存储程序的目标代码5. 下面哪个不属于编译器的优化技术()。

A. 常量折叠B. 循环展开C. 数据流分析D. 锁定优化二、填空题1. 语法分析阶段的主要任务是()分析。

2. 编译器将源程序经过一系列处理后生成的中间代码称为()。

3. 在编译原理中,词法分析的任务是将字符序列转换为()序列。

4. 编译器在执行词法分析时会忽略()。

5. 语义分析的主要任务是检查程序的()是否符合语言的语义规则。

三、解答题1. 请简要描述编译器的工作原理。

编译器是一种将高级语言程序翻译为机器语言程序的软件工具。

它的工作过程主要分为以下几个阶段:1) 词法分析阶段:词法分析器根据事先定义的词法规则,将输入的字符序列转换为一个个具有意义的词法单元。

2) 语法分析阶段:语法分析器根据事先定义的语法规则,对词法单元进行组合和分析,生成一棵抽象语法树(AST)。

3) 语义分析阶段:语义分析器对抽象语法树进行遍历和验证,检查程序的语义是否符合规定的语义规则。

西安交通大学1995--2002年编译原理考研试题

西安交通大学1995--2002年编译原理考研试题

西安交通大学1995--2002年编译原理考研试题1995年编译原理部分(共50分)1.右列三个文法中,为SLR(1)文法的 G1:P→PaP | b(A)仅GI (B)仅G2 G2:P→bPb | cPc | b | c(C)仅G3 (D)G2和G3 G3:P→bPb | bPc |d(E) 都不是 (5分)S→aTb |,2.右列文法的句型T→ RaR/aSb/aTb/,b R →R/ S | S的最左素短语为(A)aTb (B)aSb (C)S (D)R/ (E), (4分)3. 表达式a*b-c-d$e$f-g-h*i中,运算符的优先级由高到低依次为一、*、$,且均为右结合,则相应的后缀式为(A)ab*c-d-e$fg-h-I﹡$(B)$﹡a-b-cd$e*-f-ghi(C) bcd- -a*efgh—i* $ $ (D) abed--*efgh-i* $ $(E) ab*c-d-e$f g-h-i$ (4分)4. program test(input,output) begin{main}var i,J:integer; i:=2; j:=3; CAL(i, j); writeln(j:1)procedure CAL(x, y: integer); end{main} beginy=y**2; x:=x-y; y:=y-xend; {CAL}假定程序在语法上是正确的,采用哪一种参数传递方式使程序打印16。

(A) call by reference (B) call by name (C) call by value(D)前述三种中的二种(E)都不是(**为乘幂运算) (5分)5. 生成L= amb1cmanbn | 1≥2,m≥l,n ≥0}这种语言的文法是什么?它是chomsky的哪一型文法? (5分)6. 请构造与正规式R=(a*b*ba(a | b)*等价的状态最少的DFA 。

(10分)7. 下列文法(1)是不是LL(1)文法 (2)是不是SLR(1)文法。

编译原理试题及答案

编译原理试题及答案

编译原理试题及答案一、选择题1. 编译器的主要功能是什么?A. 代码优化B. 语法分析C. 代码生成D. 所有以上选项答案:D2. 下列哪个阶段属于编译过程的前端?A. 语法分析B. 代码生成C. 运行时库链接D. 目标代码优化答案:A3. 在编译原理中,什么是“产生式系统”?A. 一种编程语言的规范B. 一种用于描述语法的系统C. 一种代码优化技术D. 一种代码生成方法答案:B4. 以下哪个是自顶向下的语法分析方法?A. LR分析B. LALR分析C. LL分析D. CYK算法答案:C5. 在编译器的哪个阶段会进行类型检查?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:C二、填空题1. 编译器在进行________时,会识别源代码中的各种标识符、常量、运算符等,并将其转换成相应的符号。

答案:词法分析2. 在编译原理中,________图是一种用于描述程序执行过程中变量状态的图,它以节点表示变量的值,以有向边表示程序的控制流。

答案:控制流3. 语法分析的主要任务是根据________规则来分析和构建源程序的语法结构。

答案:语法4. 在编译过程中,________是将源程序中的高级表示转换为机器语言或中间代码的过程。

答案:代码生成5. 编译器的________阶段负责将优化后的代码转换为目标机器可执行的指令序列。

答案:目标代码生成三、简答题1. 简述编译器的一般工作流程。

答:编译器的一般工作流程包括以下几个阶段:首先是词法分析,将源代码文本分解成一系列的记号;其次是语法分析,根据语言的语法规则构建抽象语法树;接着是语义分析,检查源代码的语义正确性并进行类型检查;然后是中间代码生成,将抽象语法树转换为中间表示形式;之后是代码优化,对中间代码进行各种优化以提高效率;最后是代码生成,将优化后的中间代码转换为目标机器的机器代码。

2. 描述自顶向下和自底向上语法分析方法的主要区别。

答:自顶向下的语法分析方法从开始符号开始,尝试将输入的记号序列归约为语法中的产生式规则,直到得到完整的抽象语法树。

南航计算机考研复试编译原理试题08答案

南航计算机考研复试编译原理试题08答案

08答案第一题:填空题(30分)1、共有30个空,每空1分, 30×1=30分。

2、参考答案:说明:(1)各个答案可有不同表达方式,只要意思相同即可;(2)带*的题中的答案可交换次序。

第二题:(10分)1、证明(3分):因为存在推导序列S=>SS*=>SS+S*=>aS+S* =>aa+S*=>aa+a*,即有 S*aa+a*成立,且aa+a*全部由终结符构成,所以aa+a*是文法的一个句子。

2、语法树(2分): S S S * S S + a 3a 1 a 23、句型分析(5分)句型aa+a*相对于S 的短语有1a 2+a 3*, a 1a 2+, a 1,a 2,a 3。

(2分) 句型aa+a*相对于S →a 的直接短语有: a 或 a 1,a 2,a 3。

(2分)句型aa+a*的句柄为: a1。

(1分)说明:(1)短语、直接短语的说明可不具体指明所相对的非终结符或规则。

(2)没用下标区分a1,a2,a3的扣1分。

(3)短语每错两个扣1分。

第三题:(12分)1、NFA (4分):2、确定化(4分):将集合T0至T5各用一个状态表示,确定化后所得DFA M如下:3、最小化(4分):步骤如下表所示(可省):最后有四个不可再分割的子集,每个子集对应一个状态,即有最小化DFA如下:说明:此大题答案只供参考,可以是其他答案,只要功能等价即可。

第四题: (15分)1、给出(*,(a,*))的最右推导:(3分)E=>(T)=>(T,E)=>(T,(T))=>(T,(T,E))=>(T,(T,*))=>(T,(E,*))=>(T,(a,*)) =>(E,(a,*))=>(*,(a,*))2、(1)将G[E]改写如下:(3分)G[E]:E→a|*|(T)T’→,E T’|εT→E T’显然,改写后的G[E]是 LL(1) 文法。

编译原理考研真题

编译原理考研真题

2003年编译原理考研真题1.(10分)叙述下面的正规式描述的语言,并画出接受该语言的最简DFA的状态转换图。

( 1 | 01 )* 0*2.(10分)某语言有两种语句:S →过程调用语句| 下标变量赋值语句过程调用语句的形式是:id(id,id, …, id),即过程名加置于圆括号中的变量表。

下标变量赋值语句的形式是:id(id, id, …, id):= id(id, id, …, id),赋值号两边都是数组名加置于圆括号中的变量表。

(a) 请你完成过程调用语句和下标变量赋值语句的文法设计,得到一个以语句S为开始符号的LR(1)文法。

不得超过6个产生式,不需要给出你的文法是LR(1)文法的证明。

(b) 如果想在LR分析的同时完成语义分析和中间代码生成,基于你的文法有什么困难?3.(10分)(a) 为下面的算术表达式文法写一个语法制导的翻译方案,它将每个子表达式E的符号(即值大于零还是小于零)记录在属性E.sign中(属性值分别用POS 或NEG表示)。

你可以假定所有的整数都不为零,这样就不用担心零的符号。

E→E *E | +E | -E | unsigned_integer(b) 为上面的表达式产生栈机器代码。

代码执行后,表达式的值留在栈上。

你自己设计所需的栈机器指令,并写清楚指令的含义。

4.(10分)在C语言的教材上,称&为地址运算符,&a为变量a的地址。

但是教材上没有说明表达式&a的类型是什么。

另外,教材上说,数组名代表数组的首地址,但是也没有说明这个值的类型。

它们所带来的一个问题是,如果a是一个数组名,那么表达式a和&a的值都是数组a的首地址,但是它们的使用是有区别的,初学时很难掌握。

下面我们给出4个C文件,请你根据编译报错信息和程序运行结果,写出表达式a和&a的类型表达式。

若你能掌握它们的类型,那么它们的区别就清楚了,你也就会正确使用它们了。

(1)文件1:typedef int A[10][20];A a;A *fun(){return(a);}该函数在Linux上用gcc编译时,报告的类型错误如下:第6行:warning: return from incompatible pointer type(2)文件2:typedef int A[10][20];A a;A *fun(){return(&a);}该函数在Linux上用gcc编译时,没有类型方面的错误。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
请回答,对函数f2为什么没有类似的警告错误。
5、(5分)
下面C语言程序经非优化编译后,若运行时输入2,则结果是
area=12.566360, addr=-1073743076
经优化编译后,若运行时输入2,则结果是
area=12.566360, addr=-1073743068
请解释为什么输出结果有区别。
4、(6分)两个C语言文件link1.c和link2.c的内容分别如下:
int buf[1] ={100};

extern int *buf;
main()
{
printf(“%d\n”, *buf);
}
在X86/Linux经命令cc link1.c link2.c编译后,运行时产生如下的出错信息:
Segmentation fault (core dumped)
Ac
Bc
2.(10分)为下面文法写一个语法制导的定义,用S的综合属性val给出下面文法中S产生的二进制数的值。例如,输入101.101时,S.val:= 5.625。(不得修改文法。)
SL . R | L
LL B | B
RBR | B
B0 | 1
3.(5分)在X86/Linux机器上,编译器报告第15行有错误:
S1 s;
A2 *fun1()
{
return(&a);
}
S2 fun2()
{
return(s);
}
4.(5分)在C语言中,若a和b是相同的结构类型,那么赋值a=b是可以的。但是编译器对这种赋值的实现方式可能和它们的字节数(size)有关。下面是两个C语言程序及在X86/Linux机器上生成的目标代码(略去了和本题目无关的部分)。扼要叙述这些目标代码中体现出的实现方式上的区别。(在下面汇编程序中给出的注释仅供参考。)
pushl %edi
pushl %esi
movl $a,%edi
movl $b,%esi
cld——设定方向标志,使地址指针自动增量
movl $6,%ecx——设定重复次数
rep——表示重复下面的指令
movsl——传送指令
.L1:
leal -8(%ebp),%esp
popl %esi
popl %edi
invalid lvalue in increment
现有如下简化的C语言表达式文法:
EE + E | ( E ) | E ++ |id|num
请你写一个语法制导定义或翻译方案,它检查++的运算对象是否合法。
3.(10分)下面是一个C语言程序:
long f1(i)
long i;
{
return(i*10);
3、(8分)下面是一个C语言的函数:
void f(char c, long j)
{
char *p;
char ch;
long m[3];
p=&c;
m[0]=j;
}
在x86/Linux机器上经某版本的编译器编译生成的汇编代码如下:
.file"frame.c"
.version"01.01"
gcc2_compiled.:
}
long f2(long i)
{
return(i*10);
}
main()
{
printf(“f1 = %d, f2 = %d\n”, f1(10.0), f2(10.0) );
}
其中函数f1和f2仅形式参数的描述方式不一样。该程序在X86/Linux机器上的运行结果如下:
f1 = 0, f2 = 100
Sid:= E
EEandE | E + E | E = E |id
4、(5分)
对于下面C语言文件s.c
f1(int x)
{
long x;
x = 1;
}
f2(int x)
{
{
long x;
x = 1;
}
}
某编译器编译时报错如下:
s.c: In function‘f1’:
s.c:3: ning: declaration of‘x’shadows a parameter
3、(10分)
在C语言中,如果变量i和j都是long类型,请写出表达式&i和表达式&i&j的类型表达式。为帮助你回答问题,下面给出一个程序作为提示,它运行时输出1。
main() {
long i, j;
printf(“%d\n”, &i&j);
}
4、(10分)一个C语言的函数如下:
func(i) long i; {
下面的文法产生代表正二进制数的0和1的串集:
BB 0 | B 1 | 1
下面的翻译方案计算这种正二进制数的十进制值:
BB10{B.val := B1.val2 }
|B11{B.val:= B1.val2 +1}
|1 {B.val:= 1 }
请消除该基础文法的左递归,再重写一个翻译方案,它仍然计算这种正二进制数的十进制值。
leave
ret
2005编译原理考研真题
1.(5分)下面是用正规式表示的变量声明:
( int | float ) id (, id )* ;
请改用上下文无关文法表示,也就是写一个上下文无关文法,它和该正规式等价。
2.(10分)在C语言中,3++和( id + id )++这样的表达式被编译时,编译器都会报告如下的错误:
下面我们给出4个C文件,请你根据编译报错信息和程序运行结果,写出表达式a和&a的类型表达式。若你能掌握它们的类型,那么它们的区别就清楚了,你也就会正确使用它们了。
(1)文件1:
typedef int A[10][20];
A a;
A *fun()
{
return(a);
}
该函数在Linux上用gcc编译时,报告的类型错误如下:
movl %eax,-24(%ebp)
.L1:
leave
ret
.Lfe1:
.sizef,.Lfe1-f
.ident"GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)"
请将执行subl $24,%esp后,esp和ebp指向地址之间的区域(见上图)用于存放哪些变量的值,按照这些变量的名字、相对于ebp指向地址的偏移、字节数(size)列出来。
struct {long i,j; double m;}a,b;
main()
{
a=b;
}
main:
pushl %ebp
movl %esp,%ebp
movl $b,%eax
movl $a,%edx
movl (%eax),%ecx
movl %ecx,(%edx)
movl 4(%eax),%ecx
movl %ecx,4(%edx)
typedef int B[20];
A a;
B *fun()
{
return(a);
}
该函数在Linux上用gcc编译时,没有类型方面的错误。
(4)文件4:
typedef int A[10][20];
A a;
fun()
{
printf(“%d,%d,%d\n”, a, a+1, &a+1);
}
main()
(a)请你完成过程调用语句和下标变量赋值语句的文法设计,得到一个以语句S为开始符号的LR(1)文法。不得超过6个产生式,不需要给出你的文法是LR(1)文法的证明。
(b)如果想在LR分析的同时完成语义分析和中间代码生成,基于你的文法有什么困难?
3.(10分)
(a)为下面的算术表达式文法写一个语法制导的翻译方案,它将每个子表达式E的符号(即值大于零还是小于零)记录在属性E.sign中(属性值分别用POS或NEG表示)。你可以假定所有的整数都不为零,这样就不用担心零的符号。
请解释为什么用同样的实在参数调用这两个函数的结果不一样。
4.(5分)优化编译器对下面程序的局部变量i和j不分配空间,为什么?
main()
{
long i, j;
i = 5;
j = i * 2;
printf(“%d\n”, i+j);
}
2006编译原理考研真题
1、(10分)下面是int i, j, k这样的类型声明的两种不同语法:
EE*E| +E|E|unsigned_integer
(b)为上面的表达式产生栈机器代码。代码执行后,表达式的值留在栈上。你自己设计所需的栈机器指令,并写清楚指令的含义。
4.(10分)在C语言的教材上,称&为地址运算符,&a为变量a的地址。但是教材上没有说明表达式&a的类型是什么。另外,教材上说,数组名代表数组的首地址,但是也没有说明这个值的类型。它们所带来的一个问题是,如果a是一个数组名,那么表达式a和&a的值都是数组a的首地址,但是它们的使用是有区别的,初学时很难掌握。
2003年编译原理考研真题
1.(10分)叙述下面的正规式描述的语言,并画出接受该语言的最简DFA的状态转换图。
( 1 | 01 )*0*
2.(10分)某语言有两种语句:
S过程调用语句|下标变量赋值语句
过程调用语句的形式是:id(id,id, …,id),即过程名加置于圆括号中的变量表。
下标变量赋值语句的形式是:id(id,id, …,id):=id(id,id, …,id),赋值号两边都是数组名加置于圆括号中的变量表。
相关文档
最新文档