华师大-编译原理-平时作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华师大编译原理-平时作业
1 对于下列语言分别写出它们的正规表达式。
(1) 英文字母组成的所有符号串,要求符号串中顺序包含五个元音。
答:令Letter表示除这五个元音外的其它字母。
((letter)*A(letter)*E(letter)*I(letter)*O(letter)*U(letter))*
(2) 英文字母组成的所有符号串,要求符号串中的字母依照词典顺序排列。
答:A*B*....Z*
(3) Σ={0,1}上的含偶数个1的所有串。
答: (0|10*1)*
(4) Σ={0,1}上的含奇数个1的所有串。
答:(0|10*1)*1
(5) 具有偶数个0和奇数个1的有0和1组成的符号串的全体。
答:设S是符合要求的串,|S|=2k+1 (k≥0)。
则S→S10|S21,|S1|=2k (k>0),|S2|=2k (k≥0)。
且S1是{0,1}上的串,含有奇数个0和奇数个1。
S2是{0,1}上的串,含有偶数个0和偶数个1。
考虑有一个自动机M1接受S1,那么自动机M1如下:
和L(M1)等价的正规表达式,即S1为:
((00|11)|(01|10)(00|11)*(01|10))*(01|10)(00|11)*
类似的考虑有一个自动机M2接受S2,那么自动机M2如下:
和L(M2)等价的正规表达式,即S2为:
((00|11)|(01|10)(00|11)*(01|10))*
因此,S为:
((00|11)|(01|10)(00|11)*(01|10))*(01|10)(00|11)*0|
((00|11)|(01|10)(00|11)*(01|10))*1
(6) 不包含子串011的由0和1组成的符号串的全体。
答:1*|1*0(0|10)*(1|ε)
(7) 由0和1组成的符号串,把它看成二进制数,能被3整除的符号串的全体。
答:假设w的自动机如下:
对应的正规表达式:(1(01*0)1|0)*
2 给出接受下列在字母表{0,1}上的语言的DFA。
(1) 所有以00结束的符号串的集合。
(2) 所有具有3个0的符号串的集合。
答:
(1) DFA M=({0,1},{q0,q1,q2},q0,{q2},δ)其中δ定义如下:
δ(q0,0)=q1δ(q0,1)=q0
δ(q1,0)=q2δ(q1,1)=q0
δ(q2,0)=q2δ(q2,1)=q0
(2)正则表达式: 1*01*01*01*
DFA M=({0,1},{q0,q1,q2,q3},q0,{q3},δ)其中δ定义如下:
δ(q0,0)=q1δ(q0,1)=q0
δ(q1,0)=q2δ(q1,1)=q1
δ(q2,0)=q3δ(q2,1)=q2
δ(q3,1)=q3
3 下面是用正规式表示的变量声明:
( int | float ) id (, id )* ;
请改用上下文无关文法表示,也就是写一个上下文无关文法,它和该正规式等价。
答:D → T L ;
T → int | float
L → L, id | id
4 试分析下面给出的if-then-else语句的文法,它的提出原本是为了矫正dangling-else (悬而未决的-else)文法的二义性:
stmt → if expr then stmt
|matched-stmt
matched-stmt→ if expr then m atched-stmt else stmt
|other
试说明此文法仍然是二义性的。
答:考虑句子if e then if e then other else if e then other else other 它具有如下所示的两种分析树stmt expr then e if stmt if matched-stmt expr then matched-stmt e other if esle stmt matched-stmt expr then matched-stmt e other esle stmt matched-stmt other stmt matched-stmt if expr then matched-stmt e if esle stmt esle stmt matched-stmt expr then e stmt other expr then matched-stmt e other if matched-stmt other
则上面给出的if-then-else文法仍是二义性的。
5 证明下面文法是SLR(1)文法,并构造其SLR分析表。
E→E+T|T
T→TF|F
F→F*|a|b
答:该文法的拓广文法G'为
(0) E' → E(1) E → E+T
(2) E → T(3) T → TF
(4) T → F(5) F → F*
(6) F → a(7) F → b
其LR(0)项目集规范族和goto函数(识别活前缀的DFA)如下:
I0 = {E'→·E, E→·E+T, E→·T, T→·TF, T→·F, F→·F*,F→·a, F→·b}
I1 = {E'→E·, E→E·+T}I2 = {E→T·, T→T·F, F→·F*, F→·a, F→·b}
I3 = {T→F·, F→F·*}I4 = {F→a·}I5 = {F→b·}
I6 = {E→E+·T, T→·TF, T→·F, F→·F*, F→·a, F→·b}I7 = {T→TF·, F→F·*}I8 = {F→F*·}
I9 = {E→E+T·, T→T·F, F→·F*, F→·a, F→·b}
求FOLLOW集: FOLLOW(E)={+, $} FOLLOW(T)={+, $, a, b}
FOLLOW(F)={+, $, a, b, *}
构造的SLR分析表如下: