编译原理与技术练习题汇总
编译原理习题(含历年专业考试题)
1. LR 分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错 地点。 () 2. 构造 LR 分析器的任务就是产生 LR 分析表。 () 3 .LR 文法肯定是无二义的,一个无二义文法决不会是 LR 文法。 () 4. 在任何时候,分析栈的活前缀 X1X2...Xm 的有效项目集就是栈顶状态 Sm 所 在的那个 项目集。 () 5 .同心集的合并有可能产生新的“移进”/“归约”冲突。 () 6. 由于 LR(0) 分析表构造简单,所以它的描述能力强、适用面宽; LR(1) 分析 表因构造复杂而描述能力弱、适用面窄。 () 7 .所有 LR 分析器的总控程序都是一样的,只是分析表各有不同。 () 8. LR 分析技术无法适用二义文法。 () 9. 项目 A →β 1 ·β 2 对活前缀αβ 1 是有效的,其条件是存在规范推导 S'*= aAW= a β 1 β 2 ω。 () 10. SLR(1) 文法的特点是:当符号栈中的符号串为βα,而面临的输入符号为α 则存在 把α归约为 A 的规范句型的前缀β A α时,方可把 a 归约为 A 。 ( )
已知文法 G[S] : S → dAB A → aA|a B → Bb| ε (1) 试问 G[S] 是否为正规文法,为什么? (2) G[S] 所产生的语言是什么? (3) G[S] 能否改写为等价的正规文法 ?
答:(1)因为S → dAB不符合正规文法产生式A→aB或A→a, a∈VT* ,A,B∈VN的格式,故G[S]不是正规文法。 (2) G[S]产生的语言为: L={danbm|n≥1,m≥0} (3)可以得到G[S]对应的正规文法G’[S]: S→dA A→aA|aB|a B→bB|ε
编译原理
第一章---第六章补充
例1
编译原理练习题
编译原理练习题一、选择题(每题2分,共10分)1. 编译器的主要功能是将源代码转换为:A. 可执行文件B. 汇编代码C. 机器代码D. 中间代码2. 词法分析阶段的主要任务是:A. 将源代码分解成多个语句B. 将源代码分解成多个单词C. 将源代码分解成多个符号D. 将源代码分解成多个表达式3. 下列哪个是自顶向下的语法分析方法?A. LL(1)分析B. LR分析C. LALR分析D. GLR分析4. 语义分析的主要任务是:A. 检查语法正确性B. 检查类型正确性C. 检查代码风格D. 检查代码的可读性5. 编译过程中的优化主要发生在:A. 词法分析阶段B. 语法分析阶段C. 语义分析阶段D. 代码生成阶段二、填空题(每空1分,共10分)6. 编译器的前端主要包括词法分析、语法分析、________和________四个阶段。
7. 编译器的后端主要包括代码生成、________和________两个阶段。
8. 编译原理中的“三地址代码”是指每个指令最多有三个________。
9. 编译过程中的“死代码”是指________。
10. 编译器的优化技术可以分为________优化和________优化。
三、计算题(每题5分,共10分)11. 假设有一个简单的算术表达式:a * b + c * d。
请使用三地址代码表示这个表达式,并给出相应的指令序列。
四、简答题(每题5分,共10分)12. 简述编译原理中词法分析器的作用和实现方法。
五、论述题(每题15分,共15分)13. 论述编译原理中语法分析的两种主要方法:自顶向下分析和自底向上分析,并比较它们的优缺点。
编译原理与技术模拟试题一期终测验(120分钟)
编译原理与技术模拟试题一一、填空题(20分)1.1编译程序的工作过程可划分为词法分析、语法分析、、中间代码生成、代码优化、等阶段,一般在阶段对表达式中运算对象的类型进行检查。
1.2 和预测分析法是自上而下的语法分析方法。
1.3常用的存储分配策略有存储分配和动态存储分配,其中,动态存储分配策略包括分配和分配。
1.4移进、归约是分析中的典型操作。
1.5对于数组M[1..6, 1..8],如果每个元素占k个存储单元,且起始地址为a,则以行为主序存放时元素M[4,4]的地址是_________________,以列为主序存放时元素M[4,4]的地址是_________________。
二、单选题(20分)2.1词法分析器不能。
A. 识别出数值常量B. 过滤源程序中的注释C. 扫描源程序并识别记号D. 发现括号不匹配2.2给定文法A→bA|ca,是该文法的句子。
A. bbaB. cabC. bcaD. cba2.3一个句型中的最左称为该句型的句柄。
A. 短语B. 直接短语C. 非终结符号D. 终结符号2.4已知文法G[S]:S→A1A→A1|S0|0。
与G等价的正规式是。
A. 0(0|1)*B. 1*|0*1C. 0(1|10)*1D. 1(10|01)*02.5源程序是句子的集合,可以较好地反映句子的结构。
A. 线性表B. 树C. 完全图D. 堆栈2.6与逆波兰式ab+c*d+对应的中缀表达式是。
A. a+b+c*dB. (a+b)* c+dC. (a+b)* (c+d)D. a+b*c+d2.7识别上下文无关语言的自动机是。
A. 下推自动机B. NFAC. DFAD. 图灵机2.8是与规范归约(最左归约)互逆的一个过程。
A. 最左推导B. 最右推导C. 词法分析D. 语义分析2.9文法G产生的的全体是该文法描述的语言,A. 句子B. 短语C. 终结符D. 非终结符2.10在表达式x:=y+1中,作为左值出现(其中,“:=”表示赋值)。
编译原理与技术考试试题
编译原理与技术考试试题一、选择题1. 编译器的作用是什么?A. 编写代码B. 执行代码C. 将源代码翻译成目标代码D. 调试程序2. 在编译过程中,源代码经过以下哪个阶段?A. 词法分析B. 语法分析C. 语义分析D. 代码生成3. 以下哪种语言常用于编译器的实现?A. C++B. JavaC. PythonD. HTML4. 语法分析树可以用于生成什么形式的中间代码?A. 逆波兰表达式B. 三地址码C. 汇编代码D. 机器码5. 以下哪个不属于编译器的前端任务?A. 词法分析B. 语法分析C. 语义分析D. 代码生成二、填空题1. 编译器将源代码转换为目标代码的过程称为__________。
2. 词法分析的输出是__________。
3. 以下哪个不属于编译器的优化技术?A. 死代码消除B. 静态单赋值化C. 指针分析D. 内存泄漏检测4. 在目标代码生成阶段,生成的代码是针对__________而言的。
5. 编译器常用的符号表数据结构包括哈希表和__________。
三、简答题1. 简要描述编译器的工作原理。
2. 解释词法分析和语法分析的作用。
3. 什么是语义分析?它的作用是什么?4. 请解释编译器的优化过程。
5. 简要描述目标代码生成的过程。
四、解答题1. 请使用自上而下的递归下降分析方法,根据以下文法,给出对字符串 "a+a*a" 的句法分析过程。
文法:E -> E + T | TT -> T * F | FF -> (E) | id2. 简要描述编译器的后端任务包括哪些内容。
3. 请解释符号表在编译过程中的作用。
并举例说明符号表的一种使用情况。
注意:以上试题仅为示例,不代表实际编译原理与技术考试试题。
根据实际题目要求,编写试题内容,并逐一回答所提问题。
您可以根据实际情况调整试题数量和内容。
编译原理考试试题与答案(汇总)
对输入串ab#给出分析过程为:
一、是非题:
1.一个上下文无关文法的开始符,可以是终结符或非终结符。 ( )
2.一个句型的直接短语是唯一的。 ( )
3.已经证明文法的二义性是可判定的。 ( )
4.每个基本块可用一个DAG表示。 ( )
5.每个过程的活动记录的体积在编译时可静态确定。 ( )
1.编译程序是对高级语言程序的解释执行。(× )
2.一个有限状态自动机中,有且仅有一个唯一的终态。(×)
3.一个算符优先文法可能不存在算符优先函数与之对应。(√ )
4.语法分析时必须先消除文法中的左递归。(×)
5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。(√)
6.逆波兰表示法表示表达式时无须使用括号。(√ )
2.考虑文法G[S]:
S → (T) | a+S | a
T → T,S | S
消除文法的左递归及提取公共左因子。
解:消除文法G[S]的左递归:
S→(T) | a+S | a
T→ST′
T′→,ST′| ε
提取公共左因子:
S→(T) | aS′
S′→+S | ε
T→ST′
T′→,ST′| ε
3.试为表达式w+(a+b)*(c+d/(e-10)+8)写出相应的逆波兰表示。
8.一个过程相应的DISPLAY表的内容为(现行活动记录地址和所有外层最新活动记录的地址)
10.常用的两种动态存贮分配办法是(栈式)动态分配和(堆式)动态分配。
11.一个名字的属性包括( 类型)和(作用域 )。
12.常用的参数传递方式有(传地址),(传值),(传名)
编译原理试题汇总 编译原理期末试题(8套含答案 大题集)
编译原理考试题及答案汇总一、选择1.将编译程序分成若干个“遍”是为了_B__。
A . 提高程序的执行效率B.使程序的结构更加清晰C. 利用有限的机器内存并提高机器的执行效率D.利用有限的机器内存但降低了机器的执行效率2.正规式 MI 和 M2 等价是指__C__。
A . MI 和 M2 的状态数相等 B.Ml 和 M2 的有向弧条数相等。
C .M1 和 M2 所识别的语言集相等 D. Ml 和 M2 状态数和有向弧条数相等3.中间代码生成时所依据的是 _C_。
A.语法规则 B.词法规则 C.语义规则 D.等价变换规则4.后缀式 ab+cd+/可用表达式__B_来表示。
A. a+b/c+d B.(a+b)/(c+d) C. a+b/(c+d) D. a+b+c/d6.一个编译程序中,不仅包含词法分析,_A____,中间代码生成,代码优化,目标代码生成等五个部分。
A.( ) 语法分析 B.( )文法分析 C.( )语言分析 D.( )解释分析7.词法分析器用于识别__C___。
A.( ) 字符串 B.( )语句 C.( )单词 D.( )标识符8.语法分析器则可以发现源程序中的___D__。
A.( ) 语义错误 B.( ) 语法和语义错误C.( ) 错误并校正 D.( ) 语法错误9.下面关于解释程序的描述正确的是__B___。
(1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于 COBOL 和 FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的A.( ) (1)(2) B.( ) (1) C.( ) (1)(2)(3) D.( ) (2)(3)10.解释程序处理语言时 , 大多数采用的是__B___方法。
A.( ) 源程序命令被逐个直接解释执行B.( ) 先将源程序转化为中间代码 , 再解释执行C.( ) 先将源程序解释转化为目标程序 , 再执行D.( ) 以上方法都可以11.编译过程中 , 语法分析器的任务就是__B___。
编译原理与技术练习题汇总
练习11.1 为什么高级程序语言需要编译程序?1.2 解释下列术语:源程序,目标程序,翻译程序,编译程序,解释程序1.3 简单叙述编译程序的主要工作过程。
1.4 编译程序的典型体系结构包括哪些构件,主要关系如何,请用辅助图示意。
1.5 编译程序的开发有哪些途径?了解你熟悉的高级编程语言编译程序的开发方式。
1.6 运用编译技术的软件开发和维护工具有许多类,简单叙述每一类的主要用途。
1.7 了解一个真实编译系统的组成和基本功能。
1.8 简单说明学习编译程序的意义和作用。
1.9 如果机器H上有两个编译:一个把语言A翻译成语言B,另一个把B翻译成C,那么可以把第一个编译的输出作为第二个编译的输入,结果在同一类机器上得到从A到C的编译。
请用T形图示意过程和结果。
练习22.1 词法分析器的主要任务是什么?2.2 下列各种语言的输入字母表是什么?(1) C(2) Pascal(3) Java(4) C#2.3 可以把词法分析器写成一个独立运行的程序,也可以把它写成一个子程序,请比较各自的优劣。
2.4 用高级语言编写一个对C#或Java程序的预处理程序,它的作用是每次调用时都把下一个完整的句子送到扫描缓冲区,去掉注释和无用的空格、制表符、回车、换行。
2.5 用高级语言实现图2.5所示的Pascal语言数的状态转换图。
2.6 用高级语言编程实现图2.6所示的小语言的词法扫描器。
2.7 用自然语言描述下列正规式所表示的语言:(1) 0(0|1)*0(2) ((ε|0)1)*)*(3) (a|b)*a(a|b|ε)(4) (A|B|...|Z)(a|b|...|z)*(5) (aa|b)*(a|bb)*(6) (0|1|...|9|A|B|C|D|E)+(t|T)2.8 为下列语言写正规式(1) 所有以小写字母a开头和结尾的串。
(2) 所有以小写字母a开头或者结尾(或同时满足这两个条件)的串。
(3) 所有表示偶数的串。
编译原理习题及答案整理后
第一章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、编译程序各阶段的工作都涉及到;a.语法分析b.表格管理c.出错处理d.语义分析e.词法分析2、编译程序工作时,通常有阶段;a.词法分析b.语法分析c.中间代码生成d.语义检查e.目标代码生成三、填空题1、解释程序和编译程序的区别在于;2、编译过程通常可分为5个阶段,分别是、语法分析、代码优化和目标代码生成;3、编译程序工作过程中,第一段输入是,最后阶段的输出为程序;4、编译程序是指将程序翻译成程序的程序;单选解答1、将编译程序分成若干个“遍”是为了使编译程序的结构更加清晰,故选b;2、构造编译程序应掌握源程序、目标语言及编译方法等三方面的知识,故选d;3、对编译而言,变量既持有左值又持有右值,故选c;4、编译程序打交道最多的就是各种表格,因此选d;5、目标代码包括汇编指令代码、可重定位指令代码和绝对指令代码3种,因此不是目标代码的只能选d;6、词法分析遵循的是构词规则,语法分析遵循的是语法规则,中间代码生成遵循的是语义规则,并且语义规则可以定义一个程序的意义;因此选a;7、b 8、c 9、d 10、c多选解答1.b、c 2. a、b、c、e填空解答是否生成目标程序2、词法分析中间代码生成3、源程序目标代码生成4、源程序目标语言第二章一、单项选择题1、文法G:S→xSx|y所识别的语言是;a. xyxb. xyxc. x n yx n n≥0d. xyx2、文法G描述的语言LG是指;a. LG={α|S错误!α , α∈V T}b. LG={α|S错误!α, α∈V T}c. LG={α|S错误!α,α∈V T∪V N}d. LG={α|S错误!α, α∈V T∪V N}3、有限状态自动机能识别;a. 上下文无关文法b. 上下文有关文法c.正规文法d. 短语文法4、设G为算符优先文法,G的任意终结符对a、b有以下关系成立;a. 若fa>gb,则a>bb.若fa<gb,则a<bc. a~b都不一定成立d. a~b一定成立5、如果文法G是无二义的,则它的任何句子α;a. 最左推导和最右推导对应的语法树必定相同b. 最左推导和最右推导对应的语法树可能不同c. 最左推导和最右推导必定相同d. 可能存在两个不同的最左推导,但它们对应的语法树相同6、由文法的开始符经0步或多步推导产生的文法符号序列是;a. 短语b.句柄c. 句型d. 句子7、文法G:E→E+T|TT→TP|PP→E|I则句型P+T+i的句柄和最左素短语为;+T和i b. P和P+T c. i和P+T+i 和T8、设文法为:S→SA|AA→a|b则对句子aba,下面是规范推导;a. S⇒SA⇒SAA⇒AAA⇒aAA⇒abA⇒abab. S⇒SA⇒SAA⇒AAA⇒AAa⇒Aba⇒abac. S⇒SA⇒SAA⇒SAa⇒Sba⇒Aba⇒abad. S⇒SA⇒Sa⇒SAa⇒Sba⇒Aba⇒aba9、文法G:S→b|∧TT→T,S|S则FIRSTVTT ;a. {b,∧,}b. {b,∧,}c.{b,∧,,,}d.{b,∧,,,}10、产生正规语言的文法为;a. 0型b. 1型c. 2型d. 3型11、采用自上而下分析,必须;a. 消除左递归b. 消除右递归c. 消除回溯d. 提取公共左因子12、在规范归约中,用来刻画可归约串;a. 直接短语b. 句柄c. 最左素短语d. 素短语13、有文法G:E→ET|TT→T+i|i句子1+28+6按该文法G归约,其值为;a. 23 B. 42 c. 30 d. 1714、规范归约指;a. 最左推导的逆过程b. 最右推导的逆过程c. 规范推导d. 最左归约的逆过程二、多项选择题1、下面哪些说法是错误的;a. 有向图是一个状态转换图b. 状态转换图是一个有向图c.有向图是一个DFA 可以用状态转换图表示2、对无二义性文法来说,一棵语法树往往代表了;a. 多种推导过程b. 多种最左推导过程c.一种最左推导过程d.仅一种推导过程e.一种最左推导过程3、如果文法G存在一个句子,满足下列条件之一时,则称该文法是二义文法;a. 该句子的最左推导与最右推导相同b. 该句子有两个不同的最左推导c. 该句子有两棵不同的最右推导d. 该句子有两棵不同的语法树e.该句子的语法树只有一个4、有一文法G:S→ABA→aAb|εB→cBd|ε它不产生下面集合;a. {a n b m c n d m|n,m≥0}b. {a n b n c m d m|n,m>0}c. {a n b m c m d n|n,m≥0}d. {a n b n c m d m|n,m≥0}e. {a n b n c n d n|n≥0}5、自下而上的语法分析中,应从开始分析;a. 句型b. 句子c. 以单词为单位的程序d. 文法的开始符e. 句柄6、对正规文法描述的语言,以下有能力描述它;型文法型文法 c.上下文无关文法 d.右线性文法 e.左线性文法三、填空题1、文法中的终结符和非终结符的交集是;词法分析器交给语法分析器的文法符号一定是,它一定只出现在产生式的部;2、最左推导是指每次都对句型中的非终结符进行扩展;3、在语法分析中,最常见的两种方法一定是分析法,另一是分析法;4、采用语法分析时,必须消除文法的左递归;5、树代表推导过程, 树代表归约过程;6、自下而上分析法采用 、归约、错误处理、 等四种操作;7、Chomsky 把文法分为 种类型,编译器构造中采用 和 文法,它们分别产生 和 语言,并分别用 和 自动机识别所产生的语言; 四、判断题1、文法 S →aS|bR|ε描述的语言是a|bc R→c S2、在自下而上的语法分析中,语法树与分析树一定相同;3、二义文法不是上下文无关文法;4、语法分析时必须先消除文法中的左递归;5、规范归约和规范推导是互逆的两个过程;6、一个文法所有句型的集合形成该文法所能接受的语言; 五、简答题1、句柄2、素短语3、语法树4、归约5、推导 六、问答题1、给出上下文无关文法的定义;2、文法GS :S →aSPQ|abQ QP→PQ bP→bb bQ →bc cQ→cc1它是Chomsky 哪一型文法2它生成的语言是什么 3、按指定类型,给出语言的文法;L={a i b j |j >i ≥1}的上下文无关文法; 4、有文法G :S →aAcB|BdA →AaB|cB →bScA|b1试求句型aAaBcbbdcc 和aAcbBdcc 的句柄; 2写出句子acabcbbdcc 的最左推导过程; 5、对于文法GS :S →L|aS|a L →L, S|S1画出句型S,a 的语法树;2写出上述句型的所有短语、直接短语、句柄和素短语; 6、考虑文法GT :T →TF|F F →F ↑P|P P →T|i证明TP ↑TF 是该文法的一个句型,并指出直接短语和句柄; 单选解答 1、选c;2、选a;3、选c;4、虽然a 与b 没有优先关系,但构造优先函数后,a 与b 就一定存在优先关系了;所以,由fa>gb 或fa<gb 并不能判定原来的a 与b 之间是否存在优先关系:故选c;5、如果文法G 无二义性,则最左推导是先生长右边的枝叶:对于d,如果有两个不同的是了左推导,则必然有二义性;故选a;6、选c;7、由图2-8-1的语法树和优先关系可以看出应选b;8、规范推导是最左推导,故选d;9、由T→T,…和T→…得FIRSTVTT={,,};由T→S得FIRSTVTS⊂FIRSTVTT,而FIRSTVTS={b,∧,};即FIRSTVTT={b,∧,,,};因此选c;10、d 11、c 12、b 13、b 14、b多选解答1、e、a、c 2、a、c、e 3、b、c、d 4、a、c 5、b、c 6、a、b、c、d、e填空解答1、空集终结符右2、最左3、自上而上自下而上4、自上而上5、语法分析6、移进接受7、4 2 型3型上下文无关语言正规语言下推自动机有限判断解答1、对2、错3、错4、错5、错6、错简答解答1、句柄:一个句型的最左直接短语称为该句型的句柄;2、素短语:至少含有一个终结符的素短语,并且除它自身之外不再含任何更小的素短语;3、语法树:满足下面4个条件的树称之为文法GS的一棵语法树;①每一终结均有一标记,此标记为V N∪V T中的一个符号;②树的根结点以文法GS的开始符S标记;③若一结点至少有一个直接后继,则此结点上的标记为V N中的一个符号;④若一个以A为标记的结点有K个直接后继,且按从左至右的顺序,这些结点的标记分别为X1,X2,…,X K,则A→X1,X2,…,X K,必然是G的一个产生式;4、归约:我们称αγβ直接归约出αAβ,仅当A→γ是一个产生式,且α、β∈V N∪V T;归约过程就是从输入串开始,反复用产生式右部的符号替换成产生式左部符号,直至文法开始符;5、推导:我们称αAβ直接推出αγβ,即αAβ⇒αγβ,仅当A→γ是一个产生式,且α、β∈V N∪V T;如果α1⇒α2⇒…⇒αn,则我们称这个序列是从α1至α2的一个推导;若存在一个从α1αn的推导,则称α1可推导出αn;推导是归约的逆过程;问答1解答一个上下文无关文法G是一个四元式V T,V N,S, P,其中:●V T是一个非空有限集,它的每个元素称为终结符号;●V N是一个非空有限集,它的每个元素称为非终结符号,V T∩V N=Φ;●S是一个非终结符号,称为开始符号;●P是一个产生式集合有限,每个产生式的形式是P→α,其中,P∈V N,α∈V T∪V N;开始符号S至少必须在某个产生式的左部出现一次;2解答1由于产生式左部存在终结符号,且所有产生式左部符号的长度均小于等于产生式右部的符号长度,所以文法GS是Chomsky1型文法,即上下文有关文法;2按产生式出现的顺序规定优先级由高到低否则无法推出句子,我们可以得到:S⇒abQ⇒abcS⇒aSPQ⇒aabQPQ⇒aabP⇒aabb⇒aabbcQ⇒aabbccS⇒aSPQ⇒aaSPQPQ⇒aaabQPQPQ⇒aaabPPQ⇒aaabPQP⇒aaaPPQ⇒aaabbPq⇒aaabbQ⇒aaabbbc⇒aaabbbccQ⇒aaabbbccc……于是得到文法GS生成的语言L={a n b n c n|n≥1}3解答1由L={a i b j|j>i≥1}知,所求该语言对应的上下文无关文法首先应有S→aSb型产生式,以保证b 的个数不少于a的个数;其次,还需有S→Sb或S→bS型的产生式,用以保证b的个数多于a的个数;也即所求上下文无关文法GS为:GS:S→aSb|Sb|b4解答1分别画出对应两句型的语法树,如图2-8-2所示句柄:AaB Bd图2-8-2 语法树2句子acabcbbdcc 的最左推导如下:S ⇒aAcB ⇒aAaBcB ⇒acaBcB ⇒acabcB ⇒acabcbScA ⇒acabcbBdcA ⇒acabcbbdcA ⇒acabcbbdcc 5解答 1句型S,a 的语法树如图2-8-32由图2-8-3可知:①短语:S 、a 、a 、S,a 、S,a ;②直接短语:a 、S ;③句柄:S ;④素短语:素短语可由图2-8-3中相邻终结符之间的优先关系求得,即;因此素短语为a;6解答首先构造TP ↑TF 的语法树如图2-8-4所示;由图2-8-4可知,TP ↑TF 是文法GT 的一个句型; 直接短语有两个,即P 和TF ;句柄为P;第三章一、单项选择题1、词法分析所依据的是;a. 语义规则b. 构词规则c. 语法规则d. 等价变换规则2、词法分析器的输出结果是 ;a. 单词的种别编码b. 单词在符号表中的位置c. 单词的种别编码和自身值d. 单词自身值3、正规式M1和M2等价是指;a. M1和M2的状态数相等b. M1和M2的有向弧条数相等c. M1和M2所识别的语言集相等d. M1和M2状态数和有向弧条数相等4、状态转换图见图3-6-1接受的字集为;a. 以0开头的二进制数组成的集合b. 以0结尾的二进制数组成的集合c. 含奇数个0的二进制数组成的集合d. 含偶数个0的二进制数组成的集合5、词法分析器作为独立的阶段使整个编译程序结构更加简洁、明确,因此, ;a. 词法分析器应作为独立的一遍b. 词法分析器作为子程序较好c. 词法分析器分解为多个过程,由语法分析器选择使用d. 词法分析器并不作为一个独立的阶段二、多项选择题1、在词法分析中,能识别出;a. 基本字b. 四元式c. 运算符d. 逆波兰式e. 常数2、令∑={a,b},则∑上所有以b开头,后跟若干个ab的字的全体对应的正规式为;a. babb. bab+c.babd. ba+be. ba|b三、填空题1、确定有限自动机DFA是的一个特例;2、若二个正规式所表示的相同,则认为二者是等价的;3、一个字集是正规的,当且仅当它可由所;四、判断题1、一个有限状态自动机中,有且仅有一个唯一终态;2、设r和s分别是正规式,则有Lr|s=Lr|Ls;3、自动机M和M′的状态数不同,则二者必不等价;4、确定的自动机以及不确定的自动机都能正确地识别正规集;5、对任意一个右线性文法G,都存在一个NFA M,满足LG=LM;6、对任意一个右线性文法G,都存在一个DFA M,满足LG=LM;7、对任何正规表达式e,都存在一个NFA M,满足LG=Le;8、对任何正规表达式e,都存在一个DFA M,满足LG=Le;五、基本题1、设M={x,y}, {a,b}, f,x,{y}为一非确定的有限自动机,其中f定义如下:fx,a={x,y} fx,b={y}fy,a=φfy,b={x,y}试构造相应的确定有限自动机M′;2、对给定正规式bd|adb|ab+,构造其NFA M;单选解答1、b 2、c 3、c 4、d 5、b多选解答1、a、c、e 2、a、b、d填空解答1、NFA 2、正规集3、DFANFA所识别判断解答 1 、2、3、错4、5、6、7、8、正确基本1解答:对照自动机的定义M=S,Σ,f,S0,Z,由f的定义可知fx,a、fy,b均为多值函数,所以是一非图3-6-7 的NFA M将转换矩阵中的所有子集重新命名而形成表3-6-4所示的状态转换矩阵; 表3-6-4 状态转换矩阵即得到M ′={0,1,2}, {a,b}, f,0, {1,2},其状态转换图如图3-6-5所示;将图3-6-5的DFA M ′最小化;首先,将M ′的状态分成终态组{1,2}与非终态组{0};其次,考察{1,2};由于{1,2}a={1,2}b={2}⊂{1,2},所以不再将其划分了,也即整个划分只有两组{0},{1,2}:令状态1代表{1,2},即把原来到达23-6-6所示化简DFA M ′;2解答:首先用A +=AA NFA M,如图3-6-7所示;第四章1、构造下面文法的LL1分析表;D→ TLT→ int | realL→ id RR→, id R | ε2、下面文法GS是否为LL1文法说明理由;S →A B | P Q x A →x y B →b cP →d P | εQ →a Q | ε3、设有以下文法:GS:S→aAbDe|dA→BSD|eB→SAc| cD| εD→Se| ε1求出该文法的每一个非终结符U的FOLLOW集;2该文法是LL1文法吗3构造CS的LL1分析表;4、将文法GV改造成为LL1的;GV:V→N|NEE→V|V+EN→i5、已知文法:GA:A→aAa|ε1该文法是LL1文法吗为什么2若采用LL1方法进行语法分析,如何得到该文法的LL1分析表3若输入符号串“aaaa”,请给出语法分析过程;1解答:LL1分析表见表4-3-1分析虽然这个文法很简单,我们还是从求开始符号集合和后继符号集合开始;FIRSTD=FIRSTT={int, real} FOLLOWD=FOLLOWL={}FIRSTL={id} FOLLOWT={id}FIRSTR={,, ε} FOLLOWR={}有了上面每个非终结符的FIRST集合,填分析表时要计算一个产生式右部α的FIRSTα就不是件难事了;填表时唯一要小心的时,ε是产生式R→ε右部的一个开始符号,而在FOLLOWR中,所以R→ε填在输入符号的栏目中;2解答:该文法不是LL1文法,见下面分析中的说明;分析只有三个非终结符有两个选择;1、P的两个右部d P 和ε 的开始符号肯定不相交;2、Q的两个右部a Q 和ε 的开始符号肯定不相交;3、对S来说,由于x ∈ FIRSTA B,同时也有x ∈ FIRSTP Q x因为P和Q都可能为空;所以该文法不是LL1文法;3解答:1求文法的每一个非终结符U的FOLLOW集的过程如下:因为:①S是识别符号,且有A→BSD、B→SAc、D→Se,所以FOLLOWS应包含FIRSTD∪FIRSTAc ∪FIRSTe ∪{}={a,d}∪{a,d,c,e}∪{e}∪{}={a,c,d,e}②又因为A→BSD和D→ε,所以FOLLOW中还包含FOLLOW A;因为S→aAbDe和B→SAc,所以FOLLOW A=FIRSTbDe∪FIRSTc={b,c}综合①、②得FOLLOWS={a,d,c,e,}∪{a,b,c,d,e,}因为A→BSD,所以FOLLOWB=FIRSTSD={a,d}因为S→aAbDe | d、A→BSD| e和B→SAc | cD,所以FOLLOWD=FIRSTe∪FOLLOW A∪FOLLOWB={e}∪{b,c}∪{a,d}={a,b,c,d,e}2GS不是LL1文法;因为产生式B→SAc|cD| ε中FIRSTSAc∩FOLLOWB={a,d}≠Ø3构造GS的LL1分析表;按照LL1分析表的构造算法构造方法GS的LL1分析表如表4-3-2所示;表4-3-2 GS的LL1分析表G′V:V→NAA→ε|EE→VBB→ε|+EN→i求出文法G′V中每一个非终结符号的FIRST集:FIRSTV={i} FIRSTA={,ε}FIRSTE={i} FIRSTB={+,ε}FIRSTN={i}求出文法G′V中每一个非终结符号的FOLLOW集:FOLLOWV={}∪FIRSTB\{ε}∪FOLLOWE={,+,}FOLLOW A= FOLLOWV={+,,}FOLLOWE= FIRST\{ε}∪FOLLOWB= FIRST\{ε}∪FOLLOWE={}FOLLOWB= FOLLOWE={ }FOLLOWN= FIRSTA\{ε}∪FOLLOWV={,,+,}可以看到,对文法G′V的产生式A→ε|E,有FIRSTE∩FOLLOW A={}∩{+,,}= Ø对产生式B→ε|+E,有FIRST+E∩FOLLOWB={+}∩{}= Ø而文法的其他产生式都只有一个不为ε的右部,所以文法G′V是LL1文法;5解答:1因为产生式A→aAa|ε有空产生式右部,而FOLLOW A={}∪FIRSTa={a, }造成FIRSTA∩FOLLOWA={A, ε}∩{a, }≠Ø所以该文法不是LL1文法;2若采用LL1方法进行语法分析,必须修改该文法;因该文法产生偶数可以为0个a,所以得到文法G′A:A→aaA|ε此时对产生式A→aaA|ε, 有FOLLOW A={}∪FOLLOW A={},因而FIRSTA∩FOLLOWA={a, ε}∩{}=Ø所以文法G′A是LL1文法,按LL1分析表构造算法构造该文法的LL1分析表如表4-3-3所示;3若采用LL1方法进行语法分析,对符号串“aaaa”的分析过程如表4-3-4所示;第五章1.设有文法GS为:S→a|b|AA→SdA|S(1)完成下列算符优先关系表,见表5-7-1,并判断GS是否为算符优先文法;表5-7-1 算符优先关系表2给出句型SdSdS 的短语、简单短语、句柄、素短语和最左素短语; 3给出输入串adb 的分析过程; 解答:1先求文法GS 的FIRSTVT 集和LASTVT 集:由S →a|b|A 得:FIRSTVTS={a,b, ;由A →Sd …得:FIRSTVTA={d};又由A →S …得:FIRSTVTS ⊂ FIRSTVTA,即FIRSTVTA={d,a,b,};由S →a|b|A 得;LASTVTS={a,b,}}; 由A →…dA 得:LASTVTA={d},又由A →S 得:LASTVTS ⊂ LASTVTA,即LASTVTA={d,a,b,}; 构造优先关系表方法如下:① 对P →…ab …,或P →…aQb …,有a ≖b; ② 对P →…aR …,而b ∈FIRSTVTR,有a ⋖b; ③ 对P →…Rb …,而a ∈FIRSTVTR,有a ⋗b; 由此得到: ① 由S →A 得:≖;② 由S →A …得:⋖FIRSTVTA,即:⋖d,⋖a ,⋖b,⋖;由A →…dA 得:d ⋖FIRSTVTA, 即:d ⋖d,d ⋖a,d ⋖b,d ⋖;③ 由S →A 得,LASTVTA ⋗,即:d ⋗,a ⋗,b ⋗,⋗;由A →Sd …得:LASTVTS ⋗d,即:a ⋗d,b ⋗d,⋗d;此外,由S 得:≖;由⋖FIRSTVTS 得:⋖a,⋖b,⋖;脂由LASTVTS ⋗得:d ⋗,a ⋗,b ⋗,⋗;最后得到算符优先关系表,见表5-7-2;表5-7-2 算符优先关系表由表5-7-2可以看出,任何两个终结符之间至少只满足≖、⋖、⋗三种优先关系之一,故GS 为算符优先文法;2为求出句型SdSdS 的短语、简单短语、句柄,我们先画出该句型对应的语法树,如图5-7-3所示;由图5-7-3得到:短语:S,SdS,SdSdS,SdSdS简单短语即直接短语:S 句柄即最左直接短语:S素短语:SdS,它同时也是该句型的最左素短语;3输入串adb的分析过程见表5-7-4表5-7-4 输入串adb的分析过程第六章一、单项选择题1、若a为终结符,则A→α·aβ为项目a.归约b.移进c.接受d.待约2、若项目集I k含有A→α·,则在状态k时,仅当面临的输入符号a∈FOLLOWA时,才采取“A→α·”动作的一定是;文法0文法1文法1文法3、就文法的描述能力来说,有;a. SLR1⊂LR0b. LR1⊂LR0c. SLR1⊂LR1d.无二义文法⊂LR14、在LR0的ACTION子表中,如果某一行中存在标记“r j”的栏,则;a.该行必定填满r jb.该行未填满r jc.其他行也有r j子表中也有r j5、一个指明了在分析过程中的某时刻所能看到产生式多大一部分;a.活前缀b.前缀c.项目d.项目集二、多项选择题1、一个LR分析器包括;a.一个总控程序b.一个项目集c.一个活前缀d.一张分析表e.一个分析栈2、LR分析器核心部分是一张分析表,该表包括等子表;1分析 b.优先关系3、每一项ACTIONS,a所规定的动作包括;a.移进b.比较c.接受d.归约e.报错4、对LR分析表的构造,有可能存在动作冲突;a.移进b.归约c.移进/归约d.移进/移进e.归约/归约5、就文法的描述能力来说,有;a. SLR1⊂LR1b. LR1⊂SLR1c. LR0⊂LR1d. LR1⊂无二义文法e. SLR1⊂无二义文法6、对LR分析器来说,存在等分析表的构造方法;0 1 0 17、自上而下的语法分析方法有;a.算符优先分析法1分析法1分析法0分析法1分析法三、填空题1、对于一个文法,如果能够构造;使得它的均是唯一确定的,则称该文法为LR文法;2、字的前缀是指该字的;3、活前缀是指的一个前缀,这种前缀不含之后的任何符号;4、在LR分析过程中,只要的已扫描部分保持可归约成一个,则扫描过的部分正确;5、将识别的NFA确定化,使其成为以为状态的DFA,这个DFA就是建立的基础;6、A→α·称为项目;对文法开始符S′→α·为项目;若a为终结符,则称A→α·aβ为项目;若B为非终结符,则称A→α·aβ为项目;7、LR0分析法的名字中“L”表示 ,“R”表示 ,“0”表示 ;四、综合题1、对于文法GS:S→AS|bA→SA|a1列出所有LR0项目2列出构成文法LR0项目集规范族;单项解答:1、A→α·称为归约项目,对文法开始符S′的归约项目,如S′→α·称为接受项目,A→α·aβa为终结符称为移进项目;在此选b.2、当用产生式A→α归约时,LR0无论面临什么输入符号都进行归约;SLR1则仅当面临的输入符号a∈FOLLOWA时进行归约;LR1则当在把α归约为A的规范句型的前缀βAa前提下,当α后跟终结符a时,才进行归约;因此选d;3、由于LR0⊂SLR1⊂LR1⊂无二义文法,故选c;4、选a;5、选c;多选解答:1、一个LR分析器包括一个总控程序和一张分析表,选a、d;2、选c、e;3、选a、c、d、e;4、在LR分析表的构造中有可能存在“移进”/“归约”和“归约”/“归约”冲突;故选c、e;5、选a、b、c、d、e;6、选a、b、c、e;7、选a、c、d、e;填空解答:1、一张分析表每个入口2、任意首部3、规范句型句柄4、输入串活前缀5、活前缀项目集合LR分析算法6、归约接受移进待约7、自左至右分析采用最右推导的逆过程即最左归约向右查看0个字符综合解答:首先将文法G拓广为GS′:S′→SS→AS|bA→SA|a1文法GS′的LR0项目是:1、S′→·S 5、S→AS·9、A→S·A2、S′→S·6、S→·b 10、A→SA·3、S→·AS 7、S→b·11、A→·a4、S→A·S 8、A→·SA 12、A→a·2、列出构成文法LR0项目集规范族;用ε-CLOSURE闭包办法构造文法G′的LR0项目集规范族如下:I0:1、S′→·S I3: 9、A→S·A I6:12、A→a·3、S→·AS 8、A→·SA I7:7、S→b·8、A→·SA 3、S→·AS11、A→·a 6、S→·b6、S→·b 11、A→·aI 1:2、S′→S · I 4:10、A →SA · 9、A →S ·A 4、S →A ·S 8、A →·SA 3、S →·AS 11、A →·a 6、S →·b 3、S →·AS 8、A →·SA 6、S →·b 11、A →·a I 2:4、S →A ·S I 5: 5、S →AS · 3、S →·AS 9、A →S ·A 6、S →·b 8、A →·SA 8、A →·SA 11、A →·a 11、A →·a 3、S →·AS 6、S →·b注意:I 1中的S′→S ·和A →·SA 是由状态I 0中的1和3读入一个S 字符后得到的下一个项目;,而I 4中的A →SA 和A →A ·S 则是由I 3中的9和3读入一个A 字符后得到的下一个项目;I 5中的S →AS ·和A →S ·A 则是由I 4中的4和8读入一个S 字符后得到的下一个项目;状态全体构成了文法G′的LR0规范族;第七章一、单项选择题1、中间代码生成所依据的是 ; a.语法规则 b.词法规则 c.语义规则 d.等价变换规则2、四元式之间的联系是通过 实现的; a.指示器 b.临时变量 c.符号表 d.程序变量3、后缀式ab+cd+/可用表达式 来表示; +b/c+d b.a+b/c+d +b/c+d +b+c/d4、表达式┓A ∨B ∧C ∨D 的逆波兰表示为 ; a. ┓AB ∨∧CD ∨ b. A ┓B ∨CD ∨∧c. AB ∨┓CD ∨∧d. A ┓B ∨∧CD ∨5所对应的表达式为 ; +B+C+D +B+C+D c.A+B+C+D d.A+B+C+D 6、四元式表示法的优点为 ;a.不便于优化处理,但便于表的更动b.不便于优化处理,但节省存储空间c.便于优化处理,也便于表的更动d.便于表的更动,也节省存储空间 7、终结符具有 属性; a.传递 b.继承 c.抽象 d.综合二、多顶选择题1、中间代码主要有 ; a .四元式 b .二元式 c .三元式 d .后缀式 e .间接三元式2、下面中间代码形式中,能正确表示算术表达式a+b+c 的有 ;a .ab+c+b .abc++e .a+b+c3、在下面的 语法制导翻译中,采用拉链-回填技术; a .赋值语句 b .goto 语句 c .条件语句 d .循环语句4、下列 中间代码形式有益于优化处理; a .三元式 b .四元式 c .间接三元式 d .逆波兰表示法e .树形表示法5、在编译程序中安排中间代码生成的目的是 ; a .便于进行存储空间的组织 b .利于目标代码的优化c .利于编译程序的移植d .利于目标代码的移植e .利于提高目标代码的质量 6、下面的中间代码形式中, 能正确表示算术表达式a .ab+cb .abc+c .a+bc7、三地址代码语句具体实现通常有 表示方法 a .逆波兰表示 b .三元式 c .间接三元式 d .树形表示 e .四元式 三、填空题1、中间代码有 等形式,生成中间代码主要是为了使 ;2、语法制导翻译既可以用来产生 代码,也可以用来产生 指令,甚至可用来对输入串进行 ;3、当源程序中的标号出现“先引用后定义”时,中间代码的转移地址须持 时才能确定,因而要进行 ;4、文法符号的属性有两种,一种称为 ,另一种称为 ;5、后缀式abc-/所代表的表达式是 ,表达式a-bc 可用后缀式 表示;6、用一张 辅以 的办法来表示中间代码,这种表示法称为间接三元式; 四、综合题1、给出下列表达式的逆波兰表示后缀式: ① a-b+c② A ∨B ∧C ∨┑D ∧E2、写出算术表达式:A+BC-D+E/C-D ↑N 的①四元式序列;②三元式序列;③间接三元式序列 单选解答 1、选c;2、四元式之间的联系是通过临时变量实现的,故选b;3、选b;4、选b;5、选d;6、四元式表示法的优点与间接三元式相同,故选c;7、选d; 多选解答1、选a 、c 、d 、e;2、b 、d 的中间代码不能正确表示a+b+c,而e 不是中间代码:故选a 、c;3、凡涉及到跳转的语句都需要采用拉链——回填技术,故选 b 、c 、d;4、选b 、c;5、选b 、d;6、选b 、e;7、选b 、c 、e;填空解答1、逆波兰记号、树形表示、三元式、四元式 目标代码的优化容易实现2、中间 目标 解释执行3、标号定义 回填4、继承属性 综合属性5、a/b-c ab-c6、间接码表 三元式表 综合解答1、① abc+;② AB ∨CD ┑E ∧∨∧2、①表达式的四元式序列:②表达式的三元式序列③间接三元式序列1-,C,D,T11-,C,D ⑴1-,C,D2,B,T1,T22,B,1 ⑵2,B,13+,A,T2,T33+,A,2 ⑶3+,A,24-,C,D,T44-,C,D ⑴⑷↑,1,N5↑,T4,N,T55↑,4,N ⑷⑸/,E,4⑹/,E,T5,T6 ⑹/,E,5 ⑸⑹+,3,5⑺+,T3,T6,T7 ⑺+,3,6⑹第八章一、单项选择题1、编译程序使用区别标识符的作用域;a. 说明标识符的过程或函数名b. 说明标识符的过程或函数的静态层次c. 说明标识符的过程或函数的动态层次d. 标识符的行号2、在目标代码生成阶段,符号表用于;a. 目标代码生成b. 语义检查c. 语法检查d. 地址分配3、过程信息表不包含;a. 过程入口地址b. 过程的静态层次c. 过程名d. 过程参数信息4、下列关于标识符和名字叙述中,正确的是;a. 标识符有一定的含义b. 名字是一个没有意义的字符序列c. 名字有确切的属性d. a~c都不正确二、多项选择题1、符号表的每一项均包含;a. 名字栏b. 类型栏c. 信息栏d. 值栏e. a~d均包含2、对编译程序所用到的符号表,涉及的操作有;a. 填写或更新信息栏内容b. 填入新名c.给定名字,访问它的有关信息d. 杂凑技术e.线性表和排序二叉树3、源程序中的错误一般有;a. 词法错误b. 语法错误c. 语义错误d. 编译错误e. 违反环境限制的错误三、填空题1、符号表中名字栏内容有两种填写方式,它们是填写和填写;2、词法分析阶段的错误主要是,可通过的办法纠正错误;3、符号表中名字的有关信息在和过程中陆续填入;4、在目标代码生成阶段,符号表是的依据;四、问答题:1、在编译过程中为什么要建立符号表单选解答:1、b 2、d 3、b 4、c多选解答:1、a 、c 2、a、b、c 3、a、b、c、e填空解答:1、标识符标识符地址及长度2、拼写错误最小距离匹配3、词法分析语法语义分析4、地址分配问答题解答:在编译过程中始终要涉及到对一些语法符号的处理,这就需要用到语法符号的相关属性;为了在需要时能找到这些语法成分及其相关属性,就必须使用一些表格来保存这些语法成分及其属性,这些。
编译原理考试试题1
编译原理一、(5×6分)回答下列问题:1.什么是S-属性文法?什么是L-属性文法?它们之间有什么关系? 2.什么是句柄?什么是素短语?3.划分程序的基本块时,确定基本块的入口语句的条件是什么? 4.运行时的DISPLAY 表的内容是什么?它的作用是什么? 5.对下列四元式序列生成目标代码:A:=B*C D:=E+F G:=A+D H:=G*2其中,H 是基本块出口的活跃变量, R0和R1是可用寄存器二、(8分)设∑={0,1}上的正规集S 由倒数第二个字符为1的所有字符串组成,请给出该字集对应的正规式,并构造一个识别该正规集的DFA 。
三、(6分)写一个文法使其语言为L(G)={ a n b m a m b n | m,n ≥1}。
四、(8分)对于文法G(E):E →T|E+T T →F|T*F F →(E)|i1. 写出句型(T*F+i)的最右推导并画出语法树。
2. 写出上述句型的短语,直接短语、句柄和素短语。
五、(12分)设文法G(S):(|*)B B |B A A A |SiA S A →+→→ 1.构造各非终结符的FIRSTVT 和LASTVT 集合; 2.构造优先关系表和优先函数。
六、(9分)设某语言的do-while 语句的语法形式为 S → do S (1) While E其语义解释为:真 假S (1)的代码 E 的代码针对自下而上的语法分析器,按如下要求构造该语句的翻译模式:(1) 写出适合语法制导翻译的产生式;(2) 写出每个产生式对应的语义动作。
七、(8分)将语句if (A<X) ∧ (B>0) then while C>0 do C:=C+D; 翻译成四元式。
八、(10分) 设有基本块如下:T1:=S+RT2:= 3T3:= 12/T2T4:=S/RA:=T1-T4T5:=S+RB:=T5T6:=T5*T3B:=T6(1)画出DAG图;(2)设A,B是出基本块后的活跃变量,请给出优化后的四元式序列。
编译原理练习题及答案
第一章练习题(绪论)一、选择题1.编译程序是一种常用的软件。
A) 应用B) 系统C) 实时系统D) 分布式系统2.编译程序生成的目标代码程序是可执行程序。
A) 一定B) 不一定3.编译程序的大多数时间是花在上。
A) 词法分析B) 语法分析C) 出错处理D) 表格管理4.将编译程序分成若干“遍”将。
A)提高编译程序的执行效率;B)使编译程序的结构更加清晰,提高目标程序质量;C)充分利用内存空间,提高机器的执行效率。
5.编译程序各个阶段都涉及到的工作有。
A) 词法分析B) 语法分析C) 语义分析D) 表格管理6.词法分析的主要功能是。
A) 识别字符串B) 识别语句C) 识别单词D) 识别标识符7.若某程序设计语言允许标识符先使用后说明,则其编译程序就必须。
A) 多遍扫描B) 一遍扫描8.编译方式与解释方式的根本区别在于。
A) 执行速度的快慢B) 是否生成目标代码C) 是否语义分析9.多遍编译与一遍编译的主要区别在于。
A)多遍编译是编译的五大部分重复多遍执行,而一遍编译是五大部分只执行一遍;B)一遍编译是对源程序分析一遍就立即执行,而多遍编译是对源程序重复多遍分析再执行;C)多遍编译要生成目标代码才执行,而一遍编译不生成目标代码直接分析执行;D)多遍编译是五大部分依次独立完成,一遍编译是五大部分交叉调用执行完成。
10.编译程序分成“前端”和“后端”的好处是A)便于移植B)便于功能的扩充C)便于减少工作量D)以上均正确第二章练习题(文法与语言)一、选择题1.文法 G 产生的 (1) 的全体是该文法描述的语言。
A.句型B. 终结符集C. 非终结符集D. 句子2.若文法 G 定义的语言是无限集,则文法必然是 (2) A递归的 B 上下文无关的 C 二义性的 D 无二义性的3. Chomsky 定义的四种形式语言文法中, 0 型文法又称为(A)文法;1 型文法又称为(C)文法;2 型语言可由(G) 识别。
A 短语结构文法B 上下文无关文法C 上下文有关文法D 正规文法E 图灵机F 有限自动机G 下推自动机4.一个文法所描述的语言是(A);描述一个语言的文法是(B)。
编译原理习题(汇总)
第1、2章一填空1.若源程序是用高级语言编写的,目标程序是__________语言的程序,则相应的翻译程序称为编译程序。
2.(华中科大)翻译程序是这样一种程序,它能够将_____________转换成与其等价的________________。
3. 对编译程序而言,输入数据是____________,输出结果是_________________。
4.(华东计算所)汇编程序是将_________翻译成_________;编译程序是将____翻译成_________a 汇编语言程序b 机器语言程序c 高级语言程序d a或be a或cf b或c5. (国防科大)编译过程中,语法分析器的任务是_______(1)分析单词是怎样构成的(2)分析单词串是如何构成语句和说明的的(3)分析语句和说明是如何构成程序的(4)分析程序的结构A (2)(3)B (2)(3)(4)C (1)(2)(3)D (1)(2)(3)(4)6. (国防科大)文法G产生的__________的全体是该文法描述的语言。
7.(中国科大)乔姆斯基定义的4种形式语言文法分别为__________文法(又称__________文法)、__________文法(又称__________文法)、__________文法(又称__________文法)、__________文法(又称__________文法)。
8. 上下文无关文法比正规文法具有更强的描述能力。
判断正误?9.程序语言由——和———定义。
10. 文法G所产生的句子的全体是(),记为()。
11.一个上下文无关文法包含的4个组成部分是()。
第4章1. 基本思想:从识别符号出发,不断建立直接推导,试图构造一个推导序列,最终由它推导出与输入符号串相同的符号串。
从语法树的角度讲,自上而下分析过程是以开始符号为根节点,试图向下构造一颗语法树,使其末端节点符号串正好与输入符号串相同。
2. LL(1)文法P73(1)文法不含左递归;(2)文法中每一个非终结符A的各个产生式的候选首符集两两不相交即:若A→α1|α2|…|αn则first(αi)∩first(αj)=Φ(i≠j)(3) 对文法中每个非终结符A,若它存在某个候选首符集包含ℇ,则first(A)∩follow(A)= Φ重点:左递归的消除计算FIRST和FOLLOW集合3. LL(1)预测分析表的构造1.自上而下分析会遇到的主要问题有——左递归——和——回溯——。
编译原理考试题及答案
编译原理考试题及答案一、选择题(每题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、汇编程序是将a 翻译成b ,编译程序是将c 翻译成d .a.汇编语言程序b.机器语言程序c.高级语言程序d. a 或者 be. a 或者 cf. b 或者 c 2、下面关于解释程序的描述正确的是 b . (1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于COBOL 和FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的a. (1)(2)b. (1)c. (1)(2)(3)d.(2)(3)3、高级语言的语言处理程序分为解释程序和编译程序两种.编译程序有五个阶段,而解释程序通常缺少(1)e 和(1)b .其中,(1)e 的目的是使最后阶段产生的目标代码更为高效. 与编译系统相比,解释系统(2)d .解释程序处理语言时,大多数采用的是(3)b 方法. (4)a 就是一种典型的解释型语言. (1): a. 中间代码生成b.目标代码生成c.词法分析d.语法分析 e.代码优化(2): a.比较简单,可移植性好,执行速度快 b.比较复杂,可移植性好,执行速度快 c.比较简单,可移植性差,执行速度慢 d.比较简单,可移植性好,执行速度慢(3): a.源程序命令被逐个直接解释执行b.先将源程序转化为之间代码,再解释执行c.先将源程序解释转化为目标程序,在执行d.以上方法都可以(4) : a. BASIC b. C c. FORTRAN d. PASCAL4、用高级语言编写的程序经编译后产生的程序叫b .用不同语言编写的程序产生 b 后,可用g 连接在一起生成机器可执行的程序.在机器中真正执行的是 e . a. 源程序 b. 目标程序 c. 函数 d. 过程 e. 机器指令代码 f. 模块g. 连接程序h.程序库5、要在某一台机器上为某种语言构造一个编译程序,必须掌握下述三方面的内容: c , d , f .a. 汇编语言b. 高级语言c. 源语言d. 目标语言e. 程序设计方法f. 编译方法g. 测试方法h. 机器语言6、由于受到具体机器主存容量的限制,编译程序几个不同阶段的工作往往被组合成(1)d ,诸阶段的工作往往是(2)d 进行的. (1) a. 过程 b. 程序 c. 批量 d.遍(2) a. 顺序 b. 并行 c. 成批 d.穿插7、编译过程中,语法分析器的任务就是 b .(1) 分析单词是怎样构成的(2) 分析单词串是如何构成语句和说明的(3) 分析语句和说明是如何构成程序的(4) 分析程序的结构8、编写一个计算机高级语言的源程序后,到正式上机运行之前,一般要经过 b 这几步. (1) 编辑(2) 编译(3) 连接(4) 运行9、编译程序必须完成的工作有a .(1) 词法分析(2) 语法分析(3) 语义分析(4) 代码生成(5) 之间代码生成(6) 代码优化a. (1)(2)(3)(4)b. (1)(2)(3)(4)(5)c. (1)(2)(3)(4)(5)(6)d.(1)(2)(3)(4)(6) e. (1)(2)(3)(5)(6) 10、编译程序是一种。
编译原理试题及答案
编译原理试题及答案一、选择题1. 编译器的主要功能是什么?A. 将高级语言代码翻译成机器语言代码B. 进行程序调试C. 进行代码优化D. 管理程序运行时的内存分配答案:A2. 词法分析器的主要任务是什么?A. 将源代码分解成多个语句B. 将源代码分解成多个词素C. 检查源代码的语法正确性D. 将词素转换为相应的语法单位答案:B3. 下列哪个是自顶向下的语法分析方法?A. LL(1)分析法B. LR(1)分析法C. LALR(1)分析法D. GLR分析法答案:A4. 语义分析的主要任务是什么?A. 检查程序的语法正确性B. 检查程序的类型正确性C. 将源代码转换为目标代码D. 进行程序的优化答案:B5. 代码生成阶段的主要任务是什么?A. 将语法树转换为目标代码B. 进行程序的优化C. 检查程序的类型正确性D. 将源代码分解成多个词素答案:A二、简答题1. 简述编译过程的主要阶段。
答案:编译过程主要分为四个阶段:词法分析、语法分析、语义分析和代码生成。
词法分析将源代码分解成词素,语法分析检查源代码的语法结构,语义分析检查源代码的语义正确性,代码生成将源代码转换为目标代码。
2. 什么是中间代码?它在编译过程中起到什么作用?答案:中间代码是一种介于源代码和目标代码之间的代码形式,它通常具有更接近于机器语言的特性,但仍然保持一定的抽象级别。
中间代码在编译过程中起到桥梁的作用,它使得代码优化和目标代码生成更加方便和高效。
三、论述题1. 论述编译器优化的几种常见方法。
答案:编译器优化主要包括以下几种方法:常量折叠、死代码消除、公共子表达式消除、循环优化、代码内联、寄存器分配等。
这些优化方法可以提高程序的执行效率,减少资源消耗,提高程序的运行速度。
结束语:本试题涵盖了编译原理的基本知识点,包括编译器的功能、编译过程的主要阶段、中间代码的作用以及编译器优化的方法。
希望考生能够通过本试题加深对编译原理的理解和掌握。
(完整word版)编译原理练习题
一章: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、过程1、扫描器的任务是从源程序中识别出一个个单词符号。
2、高级语言源程序有两种执行方式,即解释和编译。
判断:高级语言编写的源程序都必须通过编译,产生目标代码后才能运行。
多遍扫描的编译程序的多遍是指多次重复读源程序。
高级语言程序到低级语言程序的转换是基于语义的等价变换。
编译程序中错误处理的任务是对检查出的错误进行修改。
目标程序一定是机器语言程序。
连接装配程序可把经编译程序产生的目标程序变成可执行的机器语言程序。
简答题:1、请指出下列错误信息可能是编译的哪个阶段报告的?①else没有匹配的if;②数组下标越界;③使用的函数没有定义;④在数中出现了非数字信息。
答:①语法分析阶段②语义分析与中间代码生成阶段③语义分析与中间代码生成阶段④词法分析阶段2、何谓源程序、中间代码和目标代码?它们三者之间有何种关系?答:所谓源程序是指用某种高级语言编写的程序,它是编译程序的加工对象。
目标程序是指低级语言(机器语言或汇编语言)编写的程序,它是编译程序的加工结果。
中间代码是其结构介于源程序和目标程序之间的一种机内表示形式,它是编译程序产生的中间临时结果。
它们三者之间的关系是等价关系,即结构不同,但语义相同。
二章:1、文法G:S-xSx|y所识别的语言是。
A、xyx B 、(xyx)* C、x n yx n(n≥0) D、x*yx*2、设有文法G[S]=({S,B},{b},{S-b|bB,B-bS},S),该文法所描述的语言是。
计算机科学与技术专业编译原理练习题
计算机科学与技术专业编译原理练习题一、填空题:1.编译程序的工作过程一般可以划分为词法分析,语法分析,语义分析,中间代码生成,代码优化等几个基本阶段,同时还会伴有表格处理和出错处理。
2.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序。
3.编译方式与解释方式的根本区别在于是否生成目标代码。
4.翻译程序是这样一种程序,它能够将用甲语言书写的程序转换成与其等价的用乙语言书写的程序。
5.对编译程序而言,输入数据是源程序,输出结果是目标程序。
6.如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段: 编译阶段和运行阶段。
如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分为三个阶段: 编译阶段, 汇编阶段和运行阶段。
7.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序。
8.一个典型的编译程序中,不仅包括词法分析、语法分析、中间代码生成、代码优化、目标代码生成等五个部分,还应包括表格处理和出错处理。
其中,词法分析器用于识别单词。
9. 编译方式与解释方式的根本区别为是否生成目标代码。
10.所谓最右推导是指:任何一步αÞβ都是对α中最右非终结符进行替换的。
11. 一个上下文无关文法所含四个组成部分是一组终结符号、一组非终结符号、一个开始符号、一组产生式。
12.产生式是用于定义语法成分的一种书写规则。
13.设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为:L(G)={x │ Sx,x∈VT* } 。
14.设G是一个给定的文法,S是文法的开始符号,如果 Sx(其中x∈V*),则称x是文法的一个句型。
15.设G是一个给定的文法,S是文法的开始符号,如果 S x(其中x∈VT* ),则称x 是文法的一个句子。
16.扫描器的任务是从源程序中识别出一个个单词符号。
17.语法分析最常用的两类方法是自上而下和自下而上分析法。
编译原理练习题及答案
第一章练习题(绪论)一、选择题1.编译程序是一种常用的软件。
A) 应用B) 系统C) 实时系统D) 分布式系统2.编译程序生成的目标代码程序是可执行程序。
A) 一定B) 不一定3.编译程序的大多数时间是花在上。
A) 词法分析B) 语法分析C) 出错处理D) 表格管理4.将编译程序分成若干“遍”将。
A)提高编译程序的执行效率;B)使编译程序的结构更加清晰,提高目标程序质量;C)充分利用内存空间,提高机器的执行效率。
5.编译程序各个阶段都涉及到的工作有。
A) 词法分析B) 语法分析C) 语义分析D) 表格管理6.词法分析的主要功能是。
A) 识别字符串B) 识别语句C) 识别单词D) 识别标识符7.若某程序设计语言允许标识符先使用后说明,则其编译程序就必须。
A) 多遍扫描B) 一遍扫描8.编译方式与解释方式的根本区别在于。
A) 执行速度的快慢B) 是否生成目标代码C) 是否语义分析9.多遍编译与一遍编译的主要区别在于。
A)多遍编译是编译的五大部分重复多遍执行,而一遍编译是五大部分只执行一遍;B)一遍编译是对源程序分析一遍就立即执行,而多遍编译是对源程序重复多遍分析再执行;C)多遍编译要生成目标代码才执行,而一遍编译不生成目标代码直接分析执行;D)多遍编译是五大部分依次独立完成,一遍编译是五大部分交叉调用执行完成。
10.编译程序分成“前端”和“后端”的好处是A)便于移植B)便于功能的扩充C)便于减少工作量D)以上均正确第二章练习题(文法与语言)一、选择题1.文法 G 产生的 (1) 的全体是该文法描述的语言。
A.句型B. 终结符集C. 非终结符集D. 句子2.若文法 G 定义的语言是无限集,则文法必然是 (2) A递归的 B 上下文无关的 C 二义性的 D 无二义性的3. Chomsky 定义的四种形式语言文法中, 0 型文法又称为(A)文法;1 型文法又称为(C)文法;2 型语言可由(G) 识别。
A 短语结构文法B 上下文无关文法C 上下文有关文法D 正规文法E 图灵机F 有限自动机G 下推自动机4.一个文法所描述的语言是(A);描述一个语言的文法是(B)。
华东理工大学编译原理与技术(本)期末复习题及参考答案
编译原理与技术(本)2022062023模拟试卷一、简答题(共7题,35分)1、一个典型的编译程序通常由哪些部分组成?(5.0)正确答案:一个典型的编译程序通常包含8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
2、根据下列EBNF写出语法描述图。
<复合语句>::= BEGIN<语句>{;<语句>}END(5.0)正确答案:3、设有文法G[E]:E :: = T | E + T | E–TT :: = F | T * F | T / FF :: = i | ( E )求句型(F+i)–T*(E –T)的短语、简单短语和句柄。
(5.0)正确答案:短语:F相对T、Ei相对F、TF+i相对E(F+i)相对F、T、EE-T相对E(E-T)相对FT*(E-T)相对T(F+i)-T*(E-T)相对E简单短语:F、i、E-T句柄:F4、已知文法 G[Z]:Z→aZb|ab写出 L(G[Z])的全部元素。
(5.0)正确答案:L(G[Z])={anbn|n>=1}5、构造下列正规式相应的DFA b((ab)*|bb)*ab(5.0)正确答案:6、已知文法G[Z]为:Z→bMbM→(L|aL→Ma)给出句子b(aa)b#的分析过程。
(5.0)正确答案:7、设文法G[S]:S→aBc |bABA→aAb|bB→b|ε构造相应的LL(1)分析表。
(5.0)正确答案:。
《编译原理》练习题
《编译原理》练习题一一、填空题(每空1分)1.设G [S ]是一个文法,我们把能由文法的 (1) 推导出来的符号串α称为G 的一个句型。
当句型α仅由 (2) 组成时 (即α∈V T *),则将它称为G 产生的句子。
2.从某一给定的状态q 出发,仅经过若干条 (3) 的矢线所能达到的状态所组成的集合称为ε-CLOSURE(q)。
3.设G=(V N ,V T ,P,S)是一文法,我们说G 中的一个符号X ∈V N ∪V T 是有用的,是指X 至少出现在 (4) 的推导过程中,否则,就说X 是无用的。
我们将不含形如A→A 的产生式和不含无用符号及无用产生式的文法称为 (5) 。
4.我们常采用形如 (class, value)的二元式作为一个单词的 (6) 。
其中,class 是一个整数,用来指示该单词的 (7) ,value 则是单词之值。
5.一个文法G[S]可表示成形如 (8) 的四元式。
其中V N ,V T ,P 均为非空的有限集,分别称为非终结符号集、终结符号集和产生式集, S ∈V N 为文法的开始符号。
此外,将出现在各产生式左部和右部的一切符号所组成的集合称为 (9) ,记作V 。
显然,V=V N ∪V T ,V N ∩V T =∅。
6.通常,可通过两种途径来构造词法分析程序。
其一是根据对语言中各类单词的某种描述或定义,用 (10) 构造词法分析程序;另外一种途径是所谓词法分析程序的(11) 。
7.设G 为一文法,A→α是G 的一个产生式,如果α具有υAδ的形式,其中υ,δ不同时为ε,则称产生式A→α是 (12) 。
若存在推导δυαA A *⇒⇒,则称产生式A→α是 (13) 。
8.设M=(K,Σ,f,S 0,Z)为一DFA ,并设s 和t 是M 的两个不同状态,我们说状态s,t 为某一输入串w (14) ,是指从s,t 中之一出发,当扫视完w 之后到达M 的终态,但从其中的另一个状态出发,当扫视完同一个w 后而进入 (15) 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
练习11.1 为什么高级程序语言需要编译程序?1.2 解释下列术语:源程序,目标程序,翻译程序,编译程序,解释程序1.3 简单叙述编译程序的主要工作过程。
1.4 编译程序的典型体系结构包括哪些构件,主要关系如何,请用辅助图示意。
1.5 编译程序的开发有哪些途径?了解你熟悉的高级编程语言编译程序的开发方式。
1.6 运用编译技术的软件开发和维护工具有许多类,简单叙述每一类的主要用途。
1.7 了解一个真实编译系统的组成和基本功能。
1.8 简单说明学习编译程序的意义和作用。
1.9 如果机器H上有两个编译:一个把语言A翻译成语言B,另一个把B翻译成C,那么可以把第一个编译的输出作为第二个编译的输入,结果在同一类机器上得到从A到C的编译。
请用T形图示意过程和结果。
练习22.1 词法分析器的主要任务是什么?2.2 下列各种语言的输入字母表是什么?(1) C(2) Pascal(3) Java(4) C#2.3 可以把词法分析器写成一个独立运行的程序,也可以把它写成一个子程序,请比较各自的优劣。
2.4 用高级语言编写一个对C#或Java程序的预处理程序,它的作用是每次调用时都把下一个完整的句子送到扫描缓冲区,去掉注释和无用的空格、制表符、回车、换行。
2.5 用高级语言实现图2.5所示的Pascal语言数的状态转换图。
2.6 用高级语言编程实现图2.6所示的小语言的词法扫描器。
2.7 用自然语言描述下列正规式所表示的语言:(1) 0(0|1)*0(2) ((ε|0)1)*)*(3) (a|b)*a(a|b|ε)(4) (A|B|...|Z)(a|b|...|z)*(5) (aa|b)*(a|bb)*(6) (0|1|...|9|A|B|C|D|E)+(t|T)2.8 为下列语言写正规式(1) 所有以小写字母a开头和结尾的串。
(2) 所有以小写字母a开头或者结尾(或同时满足这两个条件)的串。
(3) 所有表示偶数的串。
(4) 所有不以0开始的数字串。
(5) 能被5整除的10进制数的集合。
(6) 没有出现重复数字的全体数字串。
2.9 试构造下列正规式的NFA,并且确定化,然后最小化。
(1) (a|b)*a(a|b)(2) (a||b)*a(a|b) *(3) ab((ba|ab)*(bb|aa))*ab(4) 00|(0|1)*|11(5) 1(0|1)*01(6) 1(1010*|1(010)*1*02.10 请分别使用下面的技术证明(a|b)*,(a*|b*)*以及((a|ε)b*)*这三个正规式是等价的:(1) 仅用正规式的定义及其代数性质;(2) 从正规式构造的最小DFA的同构来证明正规式的等价。
2.11 构造有限自动机M,使得(1) L(M) = {anbn | n ≥ 1};(2) L(M) = {anbncn | n ≥ 1};(3) 它能识别∑={0, 1}上0和1的个数都是偶数的串;(4) 它能识别字母表{0, 1}上的串,但是串不含两个连续的0和两个连续的1;(5) 它能接受形如±dd*,±d*E和±dd的实数,其中d={0,1,2,3,4,5,6,7,8,9}。
(6) 它能识别{a, b}上不含子串aba的所有串。
2.12 分别将下列NFA确定化,并画出最小化的DFA:(b) (c)(a)2.13 下面是URL的一个极其简化的扩展正规式的描述:letter → [A-Za-z]digit → [0-9]letgit → letter| digitletgit_hyphen → letgit | _letgit_hyphen_string → letgit_hyphen | letgit_hyphen letgit_hyphen_stringlabel → letter (letgit_hyphen_string? letgit)?URL → (label.)*label(1) 请将这个URL的扩展正规改写成只含字母表{A, B, 0, 1, _, .}上符号的正规式;(2) 构造出识别(1)更简化的URL串的有限自动机。
2.14 用某种高级语言实现(1) 将正规式转换成NFA的算法;(2) 将NFA确定化的算法;(3) 将DFA最小化的算法。
2.15 描述下列语言词法记号的正规表达式:(1) 描述C浮点数的正规表达式。
(2) 描述Java表达式的正规表达式。
2.16 Pascal语言的注释允许两种不同的形式:花括弧对{...},以及括弧星号对(*...*)。
(1) 构造一个识别这两种注释形式的DFA;(2) 用Lex的符号构造它的一个正规式。
2.17 写一个Lex输入源程序,它将产生一个把C语言程序中(注释除外)的保留字全部大写。
练习33.1对于文法G3.26[E]E→ T | E+T | E-TT→ F | T*F | T/FF→ (E) | i证明(i+T)*i是它的一个句型。
3.2 给定文法G3.27[S]S→ aAcB | BdSB→ aScA | cAB | bA→ BaB | aBc | a试检验下列符号串中哪些是G3.27 [S]中的句子。
(1) aacb(2) aabacbadcd(3) aacbccb(4) aacabcbcccaacdca(5) aacabcbcccaacbca3.3 考虑文法G3.28[S]S→ (L) | aL→ L, S | S(1) 指出该文法的终结符号及非终结符号。
(2) 给出下列各句子的语法分析树:①(a,a) ②(a,(a, a)) ③(a, ((a, a), (a, a)))(3) 分别构造(b)中各句子的一个最左推导和最右推导。
3.4 考虑文法G3.29[S]S→aSbS | bSaS |ε(1) 讨论句子abab的最左推导,说明该文法是二义性的。
(2) 对于句子abab构造两个相应的最右推导。
(3) 对于句子abab构造两棵相应的分析树。
(4) 此文法所产生的语言是什么?3.5 文法G3.30[S]为:S→ Ac | aBA→ abB→ bc写出L(G3.30)的全部元素。
3.6 试描述由下列文法G[S]所产生的语言。
(1) S→ 10S0 | aA A→bA | a(2) S→ SS | 1A0 A→1A0 | ε(3) S→ 1A | B0 A→1A | C B→B0 | C C→1C0 | ε(4) S→ bAdc A→A S | a(5) S→ aSS S→a(6) A → 0B | 1C B → 1 | 1A | 0BB C → 0 | 0A | 1CC3.7 设已给文法G3.31=(V N,V T,P,S),其中:V N = {S}V T = {a1,a2,…,a n,∨,∧, ~, [,]}P = {S→a i| i=1,2,…,n}∪{S→ ~S, S→[ S∨S], S → [ S∧S]},试指出此文法所产生的语言。
3.8 已知文法G3.32=({A,B,C},{a,b,c},A,P),其中P由以下产生式组成:A →abc A →aBbcBb →bB Bc →CbccbC →Cb aC →aaBaC →aa问:此文法表式的语言是什么?3.9 已知文法G3.33 [P]:P → aPQR |abRRQ → QRbQ → bbbR → bccR → cc证明aaabbbccc 是该文法的一个句子。
3.10 构造一个文法,使其产生的语言是由算符+, *, (, ) 和运算对象a构成的算术表达式的集合。
3.12 已知语言L={a n bb n| n≥1}, 写出产生语言L的文法。
3.13 写一文法,使其语言是偶正整数的集合。
要求:(1) 允许0打头。
(2) 不允许0打头。
3.14 文法G3.34 [S]为:S→ Ac|aB, A→ abB→ bc该文法是否为二义的?为什么?(提示:找一个句子,使之有两棵不同的分析树。
)3.15 证明下述文法G3.35[〈表达式〉]是二义的:〈表达式〉→ a | (〈表达式〉) |〈表达式〉〈运算符〉〈表达式〉〈运算符〉→+ | - | * | /3.16 下面的文法产生a的个数和b的个数相等的非空a、b串S→ aB | bAB→ bS | aBB | bA→ aS | bAA | a其中非终结符B推出b比a的个数多1个的串,A则反之。
(1) 证明该文法是二义的。
(2) 修改上述文法,不增加非终结符,使之成为非二义文法,并产生同样的语言。
3.17 考虑文法G3.36[R]R→R '|' R | RR | R* | (R) | a | b其中R '|' R表示R或R;RR表示R与R的连接;R*表示R的闭包。
(1) 证明此文法生成∑={a, b}上的除了∅和ε的所有正规表达式。
(2) 试说明此文法是二义性的。
(3) 构造一个等价的无二义性文法,该文法给出*、连接和|等运算符号的优先级和结合规则。
3.18 给出产生下述语言的上下文无关文法:(1) { a n b n a m b m | n, m≥0}。
(2) { 1n 0m1m 0n | n, m≥0}。
(3) { ωcωT | ω∈{a, b}*},其中ωT是ω的逆。
(4) { w | w∈{a,b}+,且w中a的个数恰好比b多1 }。
(4) { w | w∈{a,b}+,且|a|≤|b|≤2|a| }。
(5) { w | w是不以0开始的奇数集}。
3.19 设G=(V N,V T,P,S)为CFG,α1,α2,…,αn为V上的符号串,试证明:若α1α2…αnβ 则存在V上的符号串β1,β2,…,βn,使β=β1β2…βn,且有a iβi(i=1,2,…,n)。
3.20 设G=(V N,V T,P,S)为CFG,α和β都是V上的符号串,且αβ,试证明:(1) 当α的首符号为终结符号时,β的首符号也必为终结符号;(2) 当β的首符号为非终结符号时,则α的首符号也必为非终结符号。
3.21 写出下列语言的3型文法:(a) {a n| n≥0}(b) {a n b m | n, m≥1}(c) {a n b m c k | n, m, k≥1}3.22 已知文法G3.37 [S]:S→ dABA→ aA|aB→ε |Bb给出相应的正规式和等价的正规文法。
3.23 给出下列文法G[A]消除左递归后的等价文法:(1) A→ BaC | CbBB→ Ac | cC→ Bb | b(2) A → B a | A a | cB → B b | A b | d(3) S→ SA | AA→ SB | B | (S) | ( )B→ [S] | [ ](4) S→ AS | bA→ SA | a(5) S→ (T) | a | εT→ S | T, S练习44.1 证明:含有左递归的文法不是LL(1)文法。