编译原理实用教程 第3章 词法分析
- 格式:ppt
- 大小:374.00 KB
- 文档页数:14
第3章词法分析习题答案1.判断下面的陈述是否正确。
(1)有穷自动机接受的语言是正规语言。
(√)(2)若r1和r2是Σ上的正规式,则r1|r2也是Σ上的正规式。
(√)(3)设M是一个NFA,并且L(M)={x,y,z},则M的状态数至少为4个。
(× )(4)设Σ={a,b},则Σ上所有以b为首的符号串构成的正规集的正规式为b*(a|b)*。
(× )(5)对任何一个NFA M,都存在一个DFA M',使得L(M')=L(M)。
(√)(6)对一个右线性文法G,必存在一个左线性文法G',使得L(G)=L(G'),反之亦然。
(√) (7)一个DFA,可以通过多条路识别一个符号串。
(× )(8)一个NFA,可以通过多条路识别一个符号串。
(√)(9)如果一个有穷自动机可以接受空符号串,则它的状态图一定含有 边。
(× )(10)DFA具有翻译单词的能力。
(× )2.指与出正规式匹配的串.(1)(ab|b)*c 与后面的那些串匹配?ababbc abab c babc aaabc(2)ab*c*(a|b)c 与后面的那些串匹配? acac acbbc abbcac abc acc(3)(a|b)a*(ba)* 与后面的那些串匹配? ba bba aa baa ababa答案(1) ababbc c babc(2) acac abbcac abc(3) ba bba aa baa ababa3. 为下边所描述的串写正规式,字母表是{0, 1}.(1)以01 结尾的所有串(2)只包含一个0的所有串(3) 包含偶数个1但不含0的所有串(4)包含偶数个1且含任意数目0的所有串(5)包含01子串的所有串(6)不包含01子串的所有串答案注意 正规式不唯一(1)(0|1)*01(2)1*01*(3)(11)*(4)(0*10*10*)*(5)(0|1)*01(0|1)*(6)1*0*4.请描述下面正规式定义的串. 字母表{x, y}.(1) x(x|y)*x(2)x*(yx)*x*(3) (x|y)*(xx|yy) (x|y)*答案(1)必须以 x 开头和x结尾的串(2)每个 y 至少有一个 x 跟在后边的串 (3)所有含两个相继的x或两个相继的y的串5.处于/* 和 */之间的串构成注解,注解中间没有*/。
【编译原理】第三章词法分析⼀,词法分析器的作⽤词法分析是编译的第⼀阶段。
词法分析器主要任务是读⼊源程序的输⼊字符、将他们组成词素,⽣成并输出⼀个词法单元序列,每个词法单元对应于⼀个词素。
分析部分:词法分析、语法分析(简化编译器设计、提⾼编译器效率、增强编译器可移植性)1)词法单元:词法单元名和可选的属性值组成。
关键字、操作符……2)模式:词法单元词素可能具有的形式,当词法单元是关键字时,模式就是这个关键字的字符序列3)词素:源程序中的⼀个字符序列,它和某个词法单元模式匹配。
4)词法错误:识别出某个错误词素,继续判断下⼀个词素⼆,输⼊缓冲1)我们⾄少向前看⼀个字符,才能判断当前词素是否到头。
2)对付⼤型源程序,需要处理⼤量字符。
处理往往需要很多时间,我们采⽤两个交替读⼊的缓冲区。
(详见73)三,词法单元的规约1)我们会不会⽤完缓冲区?通常对于⽐较长的字符串我们采⽤ ”+“的形式链接起来。
2)正则表达式:letter_(letter_ | digit) * 表⽰字母开头 0个或多个字母或数字3)正则表达式例⼦a |b {a, b}(a | b) (a | b ) {aa, ab, ba, bb}aa | ab | ba | bb {aa, ab, ba, bb}a* 由字母a构成的所有串集(a | b)* 由a和b构成的所有串集复杂的例⼦( 00 | 11 | ( (01 | 10) (00 | 11) * (01 | 10) ) ) * 010011010000100000101110013)正则表达式扩展1>⼀个或多个实例⼀元后缀算符“+”的意思是“⼀个或多个实例”,即正规式a+表⽰⼀个或多个a的所有串的集合。
算符+和算符*有同样的优先级和结合性。
代数恒等式 r* = r+ | 和r+ = rr*表达了这两个算符之间的关系。
2>零个或⼀个实例⼀元后缀算符?的意思是“零个或⼀个实例”,r?是r | 的缩写。