《编译原理复习》.docVIP

  • 9
  • 0
  • 约1.04万字
  • 约 37页
  • 2019-03-02 发布于浙江
  • 举报
1.已知有限自动机如图 (1)以上状态转换图表示的语言有什么特征 (2)写出其正规式. (3)构造识别该语言的确定有限自动机DFA. [答案] 至少含有两个连续的1的0,1组合 (2) (0∣1)*11(0∣1)* (3) ? 0 1 A A AB AB A ABC ABC AC ABC AC AC ABC 重新命名,令AB为B、ABC为C、AC为D。 ? 0 1 A A B B A C C D C D D C DFA: 1 1 A B 0 0,1 C 0 1 2.试构造与下列文法G[S]等价的无左递归文法。 G[S]: S→Sa∣Nb∣c N→Sd∣Ne∣f [答案] S→Sa∣Nb∣c N→Ne∣Sd∣f 消除N→Ne∣Sd∣f左递归: N→SdN’∣f N’ ③ N’→eN’∣ε ④ 代入S→Sa∣Nb∣c: S→Sa∣SdN’b∣fN’b∣c 消除S→Sa∣SdN’b∣fN’b∣c左递归: S→fN’bS’∣cS’ ① S’→aS’∣dN’bS’∣ε ② 3.考虑下面文法G1: S→a∣∧∣(T) T→T, S∣S 消去G1的左递归。然后对每一个终结符,写出不带回溯的递归子程序。 [答案] S→a∣∧∣(T) T→ST’ T’→, ST’∣ε Void match(token t) { if (lookahead==t) lookahead=nexttoken; else error( ); } void S( ) { if (lookahead==’a’) match(‘a’); else if (lookahead==’^’) match(‘^’); else if (lookahead==’(’) { match(‘(’); T( ); if (lookahead==’)’) match(‘)’); else error( ); } else error( ); } void T( ) { S( ); T’( ); } void T’( ) { if (lookahead==’,’) { match(‘,’); S( ); T’( ); } } 4.设有以下文法: G[S]: S→eEfGh | g E→FSG | h F→SEc | cG | ε G→Sh |ε (1) 求出该文法每一个非终结符的FOLLOW集。 (2) 它是LL(1)文法吗?为什么? [答案] (1) FIRST(S)={e,g} FOLLOW(S)={#,e,g,h,c,f} FIRST(E)={h, c,e,g, ε} FOLLOW(E)={f,c} FIRST(F)={c,e,g, ε} FOLLOW(F)={e,g} FIRST(G)={e,g, ε} FOLLOW(G)={h,f,c,e,g} (2) e f g h c # S S→eEfGh S→g E E→FSG E→εSG E→FSG E→h E→FSG E→εSG F F→SEc F→ε F→SEc F→ε F→cG G G→Sh G→ε G→ε G→Sh G→ε G→ε G→ε 不是LL(1)文法 5.设有文法:G[S]: S→aBc | bAB A→aAb | b B→b | ε 构造其LL(1)分析表,并分析符号串baabbb是否是该文法的句子。 [答案] FIRST(S)={a,b} FOLLOW(S)={# } FIRST(A)={a, b } FOLLOW(A)={b,#} FIRST(B)={b, ε} FOLLOW(B)={c,#} a b c # S S→aBc S→bAB A A→aAb A→b B B→b B→ε B→ε 步骤 下推栈 输入串 动作 查分析表 1 #S baabbb# pop(S),push(bAB) S→bAB 2 # BAb baabbb # pop(b), next(ip) 匹配b 3 # BA aabbb# pop(A),push(aAb) A→aAb 4 # BbAa aabbb # pop(a), next(ip) 匹配a 5 # BbA abbb# pop(A),push(aAb) A→aAb 6 # BbbAa abbb # pop(a

文档评论(0)

1亿VIP精品文档

相关文档