1.理解符号串与集合运算。
I={A,B, … ,Z,a,b, … ,z}
L={0,1, … ,9}
说明下表示的含义:
IUL
IL
I4
I*
L+
I(IUL)*
答:
IUL:集合I与集合L的的并集
IL:集合I取一个元素与集合L取一个元素构成的字符串集合
I^4:集合I取一个元素构成的4个元素的字符串集合
I^*:集合I取一个元素构成的任意个数的元素的字符串集合
L+:集合L取一个元素构成的大于1个数的元素的字符串集合
I(IUL)^*:集合I取一个元素与集合I与集合L的并集I取一个元素构成的任意个数的元素的字符串构成的字符串集合
2.文法G(Z):Z->aZb|ab定义的是什么样的语言?
答:
由Z->aZb|ab
可得
Z->aZb,Z->ab
=>Z->aabb
=>Z->aaa...bbb...
所以改语言为I(G[Z])={a^nb^n|n>0},为2型文法
3.写出教材22页例2.2中标识符的文法四元组形式(VN,NT,P,S)。
答:
设I为标识符,I为字母,L为数字
VN={I,I,L},
VT={a,b,c,...,x,y,z,0,1,2,...,9}
p={
<I>-><L>
<I>-><I><L>
<I>-><I><D>
<I>->a
<I>->b
...
<I>->z
<D>->0
<D>->1
...
<D>->9
}
S=<I>
4.写出下列表达式的最左推导、最右推导。
G(E):
E=> E + T | T
T=>T * F | F
F=>(E)| i
i*i+i
i+i*i
i+(i+i)
注意观察最左和最右推导过程的不同。
答:
(1)i*i+i:
最左推导:
E=>E+T
=>T+T
=>T*F+T
=>F*F+T
=>i*F+T
=>i*i+T
=>i*i+F
=>i*i+i
最右推导:
E=>E+T
=>E+F
=>E+i
=>T+i
=>T*F+i
=>T*i+i
=>F*i+i
=>i*i+i
(2)i+i*i:
最左推导:
E=>E+T
=>T+T
=>F+T
=>i+T
=>i+T*F
=>i+F*F
=>i+i*F
=>i+i*i
最右推导:
E=>E+T
=>E+T*F
=>E+T*i
=>E+F*i
=>E+i*i
=>T+i*i
=>F+i*i
=>i+i*i
(3)i+(i+i):
最左推导:
E=>E+T
=>T+T
=>F+T
=>i+T
=>i+F
=>i+(E)
=>i+(E+T)
=>i+(T+T)
=>i+(F+T)
=>i+(i+T)
=>i+(i+F)
=>i+(i+T)
=>i+(i+i)
最右推导:
E=>E+T
=>E+T
=>E+F
=>E+(E)
=>E+(E+T)
=>E+(E+F)
=>E+(E+i)
=>E+(T+i)
=>E+(F+i)
=>E+(i+i)
=>T+(i+i)
=>F+(i+i)
=>i+(i+i)