第四章32计算predict集.pptVIP

  • 66
  • 0
  • 约2.08千字
  • 约 11页
  • 2017-01-03 发布于重庆
  • 举报
三个集合的定义 First(?) = { a ?VT | ??* a......} ? (if ??*? then {?} else ? ) Follow(A) = { a ?VT | S?+ ....Aa..... } ? (if S?*......A then {#} else ? ) Predict(A→?) = First(?) , 当??First(?) = First(?)-{ ?} ? Follow(A) ,当??First(?) 计算First(X)集 对每一文法符号X计算First(X) 若X ?VT,First(X)={X} 若X ?VN则 First(X)={a| X?a…?PSet,a ?VT} 若X ?VN,且有产生式X??,则{?} ? First(X) 若X ?VN,有产生式X?Y1Y2…Yn ,且Y1,Y2,…,Yi ?VN 当Y1,Y2,…,Yi-1?* ?, 则First(Y1)- {?} , First(Y2)- {?},… First(Yi-1)- {?}, First(Yi)都包含在First(X)中。 当Yi ?* ?(i=1,2,…n), 将{?}并入First(X) 中。 计算First(?)集 若符号串?=X1X2…Xn, 当X1,X2,…Xi-1?*?,Xi不能 ?* ?,则 First(?)=?1i-1(First(Xj)-{?}) ? First(Xi) 若所有Xi都能?*?,则 First(?)= ?1nFirst(Xj) 计算Follow集 1: 对所有A?VN,令Follow(A):={ };对开始符 S,令Follow(S):={# }; 2: 若有产生式A→xBy, 如果??First(y) 则: Follow(B):=(First(y)-{?}) ? Follow(A) 否则 Follow(B):= First(y) 3: 重复2和3,直至对所有A?VN,Follow(A)收 敛为止。 计算Predict集 E? ? T E’ E’ ? + T E’ | ? T ? F T’ T’ ? * F T’ | ? F ? id | ( E ) 3型(正则)文法与自动机 3型文法与产生式的形式为: A ? ?B 或 A ? ? 的文法等价。其中??VT+。 定理:3型文法与自动机等价 3型文法到自动机的转换 设给定3型文法G=(VN, VT, P, Z),构造一 个自动机A=(S,?,?,s0,F),使得L(A)=L(G)。 构造过程: (1)令S = VN?{K},?=VT,s0= Z , F={K}. (2)对G中产生式形如: X ? aY 则定义 ?(X,a)= Y?P X ? a 则定义 ?(X,a)= K?P 其中K是新符号。 则L(A)= L(G) 自动机到3型文法的转换 给定自动机A=(S,?,?,s0,F),构造等价的3型文法G=(VN, VT, P, Z),使得L(A)=L(G) (只有一个初始状态) 构造过程: 设F’= {Y| Y?F且Y没有输出边} (1) 令VN= S\F’,VT= ?, Z= s0 (2) 如有?(X,a)=Y : 如果Y?F,则定义X?a 如果Y?F’,则定义X?aY 则L(A)= L(G) * * Predict(A→?) = First(?) ,当First(?)不含? = First(?)-{ ?} ? Follow(A) ,当First(?)含? Predict( E?TE’ ) = first(TE’) = { id , ( } Predict( E’ ?+TE’ ) = first(+TE’) = { + } Predict( E’ ? ? ) = follow(E’) = { ) , # } Predict( T ?FT’ ) = first(FT’) = { id , ( } Predict( T’ ?*FT’ ) = first(*FT’) = { * } Predict( T’ ? ? ) = follow(T’) = { + , )

文档评论(0)

1亿VIP精品文档

相关文档