编译原理与技术练习题汇总

合集下载

编译原理试题及答案

编译原理试题及答案

编译原理试题及答案一、选择题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. 给定一个简单的四则运算表达式,请写出其对应的逆波兰表达式。

编译原理复习题有答案

编译原理复习题有答案

编译原理复习题有答案编译原理复习题及答案一、选择题1. 编译器的主要功能是什么?A. 代码格式化B. 代码优化C. 将源代码转换为机器码D. 错误检测和修复答案:C2. 词法分析阶段的主要任务是什么?A. 语法分析B. 语义分析C. 识别源程序中的词法单元D. 代码生成答案:C3. 下列哪个不是编译原理中的常见数据结构?A. 栈B. 队列C. 哈希表D. 链表答案:D4. 语法分析通常采用哪种方法?A. 递归下降分析B. 动态规划C. 贪心算法D. 深度优先搜索答案:A5. 代码优化的目的是什么?A. 增加程序长度B. 减少程序运行时间C. 提高程序的可读性D. 增加程序的复杂性答案:B二、简答题1. 简述编译过程的主要阶段。

答案:编译过程主要分为四个阶段:词法分析、语法分析、语义分析和代码生成。

词法分析负责将源代码分解成词法单元;语法分析构建语法树,检查源代码的语法结构;语义分析检查程序的语义正确性;代码生成将源代码转换成目标代码或机器码。

2. 什么是自底向上的语法分析方法?答案:自底向上的语法分析方法是一种从叶子节点开始,逐步向上构建语法树的方法。

它通常使用移进-归约分析技术,通过将输入符号与栈顶符号进行匹配,不断地将它们归约成非终结符,直到整个输入被归约为起始符号。

3. 请解释什么是中间代码,并说明其作用。

答案:中间代码是一种介于源代码和目标代码之间的代码形式,通常用于代码优化和目标代码生成。

它具有高级语言的可读性,同时又能表达程序的控制流和数据流信息。

中间代码使得编译器可以在不同的阶段对程序进行优化,提高程序的执行效率。

三、论述题1. 论述编译原理中的错误处理机制。

答案:编译原理中的错误处理机制主要包括错误检测、错误恢复和错误报告。

错误检测是指在编译过程中识别出源代码中的语法或语义错误;错误恢复是指在检测到错误后,编译器采取的措施以继续编译过程,避免因单个错误而中断整个编译;错误报告则是向程序员提供错误信息,帮助其定位和修复错误。

编译原理习题及答案

编译原理习题及答案

( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 10.× 22.√
) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 11.
二、填空题: 2.编译过程可分为 ( 词法分析) , (语法分析) , (语义分析与中间代码生成 ) , (优化)和(目标 代码生成 )五个阶段。 3.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是( 二义性的 4.从功能上说,程序语言的语句大体可分为( 5.语法分析器的输入是( 单词符号 6.扫描器的任务是从( 源程序中 执行性 )语句和(说明性 ) 。 ) 。 ) ,其输出是( 语法单位 )中识别出一个个( 单词符号 ) 。 )语句两大类。
因此,文法 G[为二义文法。
五.计算题(10 分) 已知文法 A->aAd|aAb| ε
判断该文法是否是 SLR(1) 文法,若是构造相应分析表,并对输入串 ab# 给出分析过程。 解:增加一个非终结符 S/后,产生原文法的增广文法有: S'->A A->aAd|aAb|ε 下 面 构 造 它 的 LR(0) 项 目 集 规 范 族 为 :
对输入串 ab#给出分析过程为:
一、是非题:
1.一个上下文无关文法的开始符,可以是终结符或非终结符。 2.一个句型的直接短语是唯一的。 3.已经证明文法的二义性是可判定的。 4.每个基本块可用一个 DAG 表示。 5.每个过程的活动记录的体积在编译时可静态确定。 6.2 型文法一定是 3 型文法。 7.一个句型一定句子。 8.算符优先分析法每次都是对句柄进行归约。 X 9.采用三元式实现三地址代码时,不利于对中间代码进行优化。 10.编译过程中,语法分析器的任务是分析单词是怎样构成的。 11.一个优先表一定存在相应的优先函数。 13.递归下降分析法是一种自下而上分析法。 14.并不是每个文法都能改写成 LL(1)文法。 15.每个基本块只有一个入口和一个出口。 16.一个 LL(1)文法一定是无二义的。 17.逆波兰法表示的表达试亦称前缀式。 18.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。 19.正规文法产生的语言都可以用上下文无关文法来描述。 20.一个优先表一定存在相应的优先函数。 21.3 型文法一定是 2 型文法。 22.如果一个文法存在某个句子对应两棵不同的语法树, 则文法是二义性的。 答案:1.× 12.√ 13.× 2.× 14.√ 3.× 15.√ 4.√ 16.√ 5.√ 17.× 6.× × 18.√ 19.√ 20.× 21.√ 7.× 8.× 9.√ X 12.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。

编译原理练习题

编译原理练习题

编译原理练习题一、选择题(每题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. 论述编译原理中语法分析的两种主要方法:自顶向下分析和自底向上分析,并比较它们的优缺点。

编译原理与技术考试试题

编译原理与技术考试试题

编译原理与技术考试试题一、选择题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. 请解释符号表在编译过程中的作用。

并举例说明符号表的一种使用情况。

注意:以上试题仅为示例,不代表实际编译原理与技术考试试题。

根据实际题目要求,编写试题内容,并逐一回答所提问题。

您可以根据实际情况调整试题数量和内容。

编译原理试题汇总+编译原理期末试题(8套含答案+大题集)(完整资料).doc

编译原理试题汇总+编译原理期末试题(8套含答案+大题集)(完整资料).doc

此文档下载后即可编辑编译原理考试题及答案汇总一、选择1.将编译程序分成若干个“遍”是为了_B__。

A . 提高程序的执行效率B.使程序的结构更加清晰C. 利用有限的机器内存并提高机器的执行效率D.利用有限的机器内存但降低了机器的执行效率2.正规式 MI 和 M2 等价是指__C__。

A . MI 和 M2 的状态数相等和 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) 所有表示偶数的串。

2-3-习题(含解答)

2-3-习题(含解答)

2-3 习题(含解答)目录第1章编译原理概述 (1)第2章PL/O编译程序的实现 (4)第3章文法和语言 (4)第4章词法分析 (13)第5章自顶向下语法分析方法 (28)第6章自底向上优先分析 (39)第7章LR分析 (42)第8章语法制导翻译和中间代码生成 (60)第9章符号表 (67)第10章目标程序运行时的存储组织 (70)第11章代码优化 (73)第12章代码生成 (76)综合练习一 (79)综合练习二 (84)综合练习三 (90)综合练习四 (95)综合练习五 (101)综合练习六 (107)第1章编译原理概述一、选择题1.一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括 (1) 。

其中, (2) 和代码优化部分不是每个编译程序都必需的。

词法分析器用于识别 (3) ,语法分析器则可以发现源程序中的 (4) 。

(1) A.模拟执行器 B.解释器 C.表格处理和出错处理 D.符号执行器(2) A.语法分析 B.中间代码生成 C.词法分析 D.目标代码生成(3) A.字符串 B.语句 C.单词 D.标识符(4) A.语义错误 B.语法和语义错误 C.错误并校正 D.语法错误2.程序语言的语言处理程序是一种 (1) 。

(2) 是两类程序语言处理程序,他们的主要区别在于 (3) 。

(1) A.系统软件 B.应用软件 C.实时系统 D.分布式系统(2) A.高级语言程序和低级语言程序 B.解释程序和编译程序C.编译程序和操作系统D.系统程序和应用程序(3) A.单用户与多用户的差别 B.对用户程序的查错能力C.机器执行效率D.是否生成目标代码3.汇编程序是将翻译成,编译程序是将翻译成。

A.汇编语言程序B.机器语言程序C.高级语言程序D. A 或者BE. A 或者CF. B或者C4.下面关于解释程序的描述正确的是。

(1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于COBOL 和 FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的A. (1)(2)B. (1)C. (1)(2)(3)D.(2)(3)5.高级语言的语言处理程序分为解释程序和编译程序两种。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
给出相应的正规式和等价的正规文法。
3.23 给出下列文法 G[A]消除左递归后的等价文法: (1) A→ BaC | CbB B→ Ac | c C→ Bb | b (2) A → B a | A a | c B → B b |Ab | d (3) S→ SA | A A→ SB | B | (S) | ( ) B→ [S] | [ ] (4) S→ AS | b A→ SA | a (5) S→ (T) | a | ε T→ S | T, S
《编译原理与技术》练习题
1
练习 1
1.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 形图示 意过程和结果。
《编译原理与技术》练习题
4
练习 3
3.1 对于文法 G3.26[E] E→ T | E+T | E-T T→ F | T*F | T/F F→ (E) | i
证明(i+T)*i 是它的一个句型。
3.2 给定文法 G3.27[S] S→ aAcB | BdS B→ aScA | cAB | b A→ BaB | aBc | a
《编译原理与技术》练习题
3
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:
(a)
(b)
(c)
a
a,b
0
1
b
1
a
a
a,b
0a
b3
4
a
b 2b
B
b
a
a,b
A abc Bb bB bC Cb aC aa
A aBbc Bc Cbcc aC aaB
问:此文法表式的语言是什么?
3.9 已知文法 G3.33 [P]:
P → aPQR |abR RQ → QR bQ → bb bR → bc cR → cc
证明 aaabbbccc 是该文法的一个句子。
3.10 构造一个文法,使其产生的语言是由算符+, *, (, ) 和运算对象 a 构成的算术表达式的集合。
《编译原理与技术》练习题
8
练习 4
4.1 证明:含有左递归的文法不是 LL(1)文法。 4.2 对于文法 G4.11[S]
S → uBDz B → Bv | w D → EF E→y| F→x| (1) 计算文法 G4.11 各非终结符的 FIRST 集和 FOLLOW 集,以及各产生式的 SELLECT 集。 (2) 判断该文法是否是 LL(1)文法。 (3) 若不是 LL(1)文法,则修改此文法 , 使其成为能产生相同语言的 LL(1) 文法。 4.3 已知布尔表达式文法 G4.12[bexpr] bexpr→ bexpr or bterm | bterm bterm→ bterm and bfactor | bfactor bfactor→ not bfactor | (bexpr) | true | false 改写文法 G4.12 为扩充的巴克斯范式,并为每个非终结符构造递归下降分析子程序。 4.4 已知用 EBNF 表示的文法 G4.13[A] A→ [ B B→ X ] {A} X→ (a | b) {a | b} 试用类 C 或类 PASCAL 语言写出其递归下降子程序。 4.5 已知文法 G4.14[S] S→ (L) | a L→ L, S | S
《编译原理与技术》练习题
2
练习 2
2.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*0 2.10 请分别使用下面的技术证明(a|b)*,(a*|b*)*以及((a|)b*)*这三个正规式是等价的: (1) 仅用正规式的定义及其代数性质; (2) 从正规式构造的最小 DFA 的同构来证明正规式的等价。
《编译原理与技术》练习题
6
3.12 已知语言 L={anbbn| n≥1}, 写出产生语言 L 的文法。
3.13 写一文法,使其语言是偶正整数的集合。 要求:
(1) 允许 0 打头。 (2) 不允许 0 打头。
3.14 文法 G3.34 [S]为: S→ Ac|aB, A→ ab B→ bc
该文法是否为二义的?为什么?(提示:找一个句子,使之有两棵不同的分析树。)
若 α1α2…αn β 则存在 V 上的符号串 β1,β2,…,βn,使 β=β1β2…βn,且有 ai βi (i=1,2,…,n)。
3.20 设 G=(VN,VT,P,S)为 CFG,α 和 β 都是 V 上的符号串,且 α β,试证明:
(1) 当 α 的首符号为终结符号时,β 的首符号也必为终结符号;
(1) S→ 10S0 | aA A→bA | a (2) S→ SS | 1A0 A→1A0 | ε (3) S→ 1A | B0 A→1A | C B→B0 | C (4) S→ bAdc A→AS | a (5) S→ aSS S→a
C→1C0 | ε
(6) A → 0B | 1C B → 1 | 1A | 0BB C → 0 | 0A | 1CC
பைடு நூலகம்
《编译原理与技术》练习题
7
(3) { cT | ∈{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=(VN,VT,P,S)为 CFG,α1,α2,…,αn 为 V 上的符号串,试证明:
试检验下列符号串中哪些是 G3.27 [S]中的句子。 (1) aacb (2) aabacbadcd (3) aacbccb (4) aacabcbcccaacdca (5) aacabcbcccaacbca
3.3 考虑文法 G3.28[S] S→ (L) | a L→ L, S | S (1) 指出该文法的终结符号及非终结符号。
其中非终结符 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 的闭包。
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 语言程序中(注释除外)的保留字全部大写。
相关文档
最新文档