一:编译原理习题 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; } } 习题一、单项选择题 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......余下全文>> 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 请采纳。二:编译原理试题 10分
三:编译原理试题· 10分
四:编译原理第三版课后答案刘铭百度文库
五:编译原理试题
六:编译原理题目
七:有会编译原理的么,应付考试,问问题
八:编译原理 文法题目