编译原理:理解文法和语文
1.理解符号串与集合运算。
L={A,B, … ,Z,a,b, … ,z}
D={0,1, … ,9}
说明下表示的含义:
LUD :全部字母和数字的集合
LD :由一个字母后跟一个数字组成的所有符号串的集合
L4 :由4个字母组成的所有符号串的集合
L* :由字母组成的所有符号串(包括∑)的集合
D+ :由一个或若干个数字组成的所有符号串的集合
L(LUD)* :以字母开头,后跟字母、数字组成的所有符号串的集合
2.文法G(Z):Z->aZb|ab定义的是什么样的语言?
解析:
产生式:Z->aZb, Z->ab >>可以推导出: Z=>ab, Z=>aZb=>a²b²
重复使用产生式:Z->aZb >>得 : Z=>aZb=>a²Zb²...=>aⁿ﹣¹Zbⁿ﹣¹=>aⁿbⁿ
所以语言为L(G[Z])={aⁿbⁿ|n≥1}
3.写出教材22页例2.2中标识符的文法四元组形式(VN,NT,P,S)。
解析:
有文法 G=(VN,VT,P,S),设L为标识符,D为字母,H为数字
VN={L,D,H},VT={a,b,c,...,x,y,z,0,1,2,...,9}
P= {<L>-><D>
<L>-><L><D>
<L>-><L><H>
{<D>-><a>}
{<D>-><b>}
┊
{<D>-><z>}
{<H>-><0>}
{<H>-><1>}
┊
{<H>-><9>}
S=<L>
4.写出下列表达式的最左推导、最右推导。
G(E):
E=> E + T | T
T=>T * F | F
F=>(E)| i
- i*i+i
- i+i*i
- 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