。在消除了S的直接左递归后,得到整个文法为:S→abcS’bcScSS’→abcSεQ→SababbR→Saa可以看到从文法开始符号S出发,永远无法达到Q和R,所以关于Q和R的规则是多余的,将其删除并化简,最后得到文法GS为:S→abcSbcS’cSS→abcSε当然如果对文法非终结符排序的不同,最后得到的文法在形式上可能不一样,但它们都是等价的。例如,如果对上述非终结符排序选为S、Q、R,那么最后得到的文法GR为:R→bcaRcaRaR’R→bcaRε容易证明上述两个文法是等价的。
2
f四:数据结构与算法
typedefstructChomsky定义一个产生式结构体stri
gleft定义产生式的左部stri
gright定义产生式的右部ChomskyvoidapartChomskypi
ti分开产生式左右部,i代表产生式的编号i
tzeroChomskyp0型文法i
to
eChomskyp1型文法i
ttwoChomskyp2型文法i
tremoveChomskypi
t
消除左递归
五:出错分析
1:空符号表示错误,前后不一致2:文法判断参数传递错误
3
f六:实验结果与分析不是二型文法的:
是二型文法的:
4
f七:源代码
i
cludeiostreami
cludestri
gusi
g
amespacestd
5
ftypedefstructChomsky定义一个产生式结构体stri
gleft定义产生式的左部stri
gright定义产生式的右部Chomskyi
t
产生式总数stri
gstri
gs存储产生式charq20
voidapartChomskypi
ti分开产生式左右部,i代表产生式的编号i
tjforj0jstri
gsle
gthjifstri
gsjpileftstri
gssubstr0j从0开始的j长度的子串,即0j1pirightstri
gssubstrj1stri
gsle
gthj从j1开始的后面子串i
tzeroChomskyp0型文法i
tflag0cou
t0i
tijfori0i
iforj0ji
tpileftle
gthjifpileftjApileftjZ有否非终结符flag非终结符个数加1ifflag0说明某一个产生式左部有非终结符flag0下个产生式判断前清零cou
t左部存在非终结符的产生式个数加1elsebreak左部没有非终结符,结束ifcou
t
retur
1属于0型文法
6
felsecoute
dl