编译原理考试题

一:编译原理习题 30分

static void(int[]group)

{

int temp;

int pos=0;

for(int i=0;i< group.Length-1;i++)

{

pos=i;

for(intj=i+1;j

{

if(group[j]

{

pos=j;

}

}//第i个数与最小的数group[pos]交换

temp=group[i];

group[i]=group[pos];

group[pos]=temp;

}

}

二:编译原理试题 10分

习题一、单项选择题

1、将编译程序分成若干个“遍”是为了 。

a.提高程序的执行效率

b.使程序的结构更加清晰

c.利用有限的机器内存并提高机器的执行效率

d.利用有限的机器内存但降低了机器的执行效率

2、构造编译程序应掌握 。

a.源程序b.目标语言

c.编译方法d.以上三项都是

3、变量应当 。

a.持有左值b.持有右值

c.既持有左值又持有右值d.既不持有左值也不持有右值

4、编译程序绝大多数时间花在 上。

a.出错处理b.词法分析

c.目标代码生成d.管理表格

5、 不可能是目标代码。

a.汇编指令代码b.可重定位指令代码

c.绝对指令代码d.中间代码

6、使用 可以定义一个程序的意义。

a.语义规则b.词法规则

c.产生规则d.词法规则

7、词法分析器的输入是 。

a.单词符号串b.源程序

c.语法单位d.目标程序

8、中间代码生成时所遵循的是- 。

a.语法规则b.词法规则

c.语义规则d.等价变换规则

9、编译程序是对 。

a.汇编程序的翻译b.高级语言程序的解释执行

c.机器语言的执行d.高级语言的翻译

10、语法分析应遵循 。

a.语义规则b.语法规则

c.构词规则d.等价变换规则

解答

1、将编译程序分成若干个“遍”是为了使编译程序的结构更加清晰,故选b。

2、构造编译程序应掌握源程序、目标语言及编译方法等三方面的知识,故选d。

3、对编译而言,变量既持有左值又持有右值,故选c。

4、编译程序打交道最多的就是各种表格,因此选d。

5、目标代码包括汇编指令代码、可重定位指令代码和绝对指令代码3种,因此不是目标代码的只能选d。

6、词法分析遵循的是构词规则,语法分析遵循的是语法规则,中间代码生成遵循的是语义规则,并且语义规则可以定义一个程序的意义。因此选a。

7、b 8、c 9、d 10、c

二、多项选择题

1、编译程序各阶段的工作都涉及到 。

a.语法分析b.表格管理c.出错处理

d.语义分析e.词法分析

2、编译程序工作时,通常有 阶段。

a.词法分析b.语法分析c.中间代码生成

d.语义检查e.目标代码生成

解答

1.b、c 2. a、b、c、e

三、填空题

1、解释程序和编译程序的区别在于 。

2、编译过程通常可分为5个阶段,分别是 、语法分析 、代码优化和目标代码生成。3、编译程序工作过程中,第一段输入是 ,最后阶段的输出为 程序。

4、编译程序是指将 程序翻译成 程序的程序。解答

是否生成目标程序 2、词法分析 中间代码生成 3、源程序目标代码生成4、源程序 目标语言

一、单项选择题

1、文法G:S→xSx|y所识别的语言是 。

a. xyxb. (xyx)*c. xnyxn(n≥0)d. x*yx*

2、文法G描述的语言L(G)是指 。

a......余下全文>>

三:编译原理试题· 10分

Lex和Yacc应用方法(一).初识Lex

草木瓜 20070301

Lex(Lexical Analyzar 词法分析生成器),Yacc(Yet Another Compiler Compiler

编译器代码生成器)是Unix下十分重要的词法分析,语法分析的工具。经常用于语言分

析,公式编译等广泛领域。遗憾的是网上中文资料介绍不是过于简单,就是跳跃太大,

入门参考意义并不大。本文通过循序渐进的例子,从0开始了解掌握Lex和Yacc的用法。

一.Lex(Lexical Analyzar) 初步示例

先看简单的例子(注:本文所有实例皆在RetHat Linux下完成):

一个简单的Lex文件 exfirst.l 内容:

%{

#include "stdio.h"

%}

%%

[\n] ;

[0-9]+ printf("Int : %s\n",yytext);

[0-9]*\.[0-9]+ printf("Float : %s\n",yytext);

[a-zA-Z][a-zA-Z0-9]* printf("Var : %s\n",yytext);

[\+\-\*\/\%] printf("Op : %s\n",yytext);

. printf("Unknown : %c\n",yytext[0]);

%%

在命令行下执行命令flex解析,会自动生成lex.yy.c文件:

[root@localhost liweitest]flex exfirst.l

进行编译生成parser可执行程序:

[root@localhost liweitest]cc -o parser lex.yy.c -ll

[注意:如果不加-ll链结选项,cc编译时会出现以下错误,后面会进一步说明。]

/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../crt1.o(.text+0x18): In function `_start':

../sysdeps/i386/elf/start.S:77: undefined reference to `main'

/tmp/cciACkbX.o(.text+0x37b): In function `yylex':

: undefined reference to `yywrap'

/tmp/cciACkbX.o(.text+0xabd): In function `input':

: undefined reference to `yywrap'

collect2: ld returned 1 exit status

创建待解析的文件 file.txt:

title

i=1+3.9;

a3=909/6

bcd=4%9-333

通过已生成的可执行程序,进行文件解析。

[root@localhost liwei......余下全文>>

四:编译原理第三版课后答案刘铭百度文库

书后就是答案(P234 附录D 自测练习题与习题参考答案),需要上网找? 真是懒除了一定境界了

五:编译原理试题

你发那么多条求助信息,也不给点分,大家怎么帮你啊,我来回答吧!记得给我追加分啊。

1.若源程序是用高级语言编写的,目标程序是 机器语言程序或汇编程序 ,则其翻译程序称为编译程序.

2.一个典型的编译程序中,不仅包括词法分析、语法分析、中间代码生成、代码优化、目标代码生成等五个部分,还应包括表格处理和出错处理。其中,词法定析器用于识别 单词 。

3.编译方式与解释方式的根本区别为是否生成目标代码。

4.设G是一个给定的文法,S是文法的开始符号,如果S x(其中x∈V*),则称x是文法的一个句型 。

设G是一个给定的文法,S是文法的开始符号,如果S x(其中x∈VT*),则称x是文法的一个句子。

继续做题中.......

六:编译原理题目

明天写了给你吧。这实在略多了点

七:有会编译原理的么,应付考试,问问题

我会

八:编译原理 文法题目

首先扩展文法为:

1) S1->S

2) S->aS

3) S->bS

4) S->a

则:

I0 = Closure({S1->.S})={S1->.S,S->.aS,S->.bS,S->.a}

go(I0,S) = Closure({S1->S.})={S1->S.} = I1

go(I0,a) = Closure({S->a.S,S->a.})={S->a.S,S->.aS,S->.bS,S->.a,S->a.} = I2

go(I0,b) = Closure({S->b.S})={S->b.S,S->.aS,S->.bS,S->.a}=I3

go(I2,S) = closure({S->aS.})={S->aS.}=I4

go(I2,a) = Closure({S->a.S,S->a.}) = I2

go(I2,b) = Closure({S->b.S}) =I3

go(I3,S) = Closure({S->bS.}) = {S->bS.} = I5

go(I3,a) = Closure({S->a.S,S->a.}) = I2

go(I3,b) = Closure({S->b.S}) = I3

由图所示,状态I2,既有归约项目(S->a.)又有移近项目(S->.aS,S->.bS,S->.a),产生冲突。当用SRL分析法时,需向前看一步,即求出:

Follow(S) = Follow(S1) = {#}

则,Follow(S)∩{a,b} =∮

故而Action(I2,a) = s2

Action(I2,b) = s3

Action(I2,#) = r4

则构造出srl分析表如下所示:

Action Goto

a b #S

I0 s2 s3 1

I1acc

I2 s2 s3r44

I3 s2 s35

I4 r2 r2 r2

I5 r3 r3r3

请采纳。

扫一扫手机访问

发表评论