云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 编译原理课后习题答案

编译原理课后习题答案

  • 62 次阅读
  • 3 次下载
  • 2026/4/26 1:38:39

第三章

1. 词法分析器的功能是什么?

答:读源程序的字符序列,逐个拼出单词,并构造相应的内部表示TOKEN;同时检查源程序中的词法错误。

2. 试分析分隔符(空格、跳格及回车等)对词法分析的影响。

答:空格、跳格、回车等分隔符号对词法分析不起作用,可以删除。但是回车符号可以用于错误定位,所以在删除回车符号前需要统计回车的个数。 3. 给出识别C语言全部实型常数的自动机。

答:(+|-|?)([1-9][0-9]*|0)(.[0-9][0-9]*|?) (E(+|-|?)[0-9][0-9]*) 4. 写出识别C语言中所有单词的LEX程序。

答: L=[A-Z] | [a-z] D=[0-9] D1=[1-9] %% (L|_)(L|D|_)* {return (1);} D1D* {return (2);} + {return (3);} ……

5

第四章

1. 设有如下文法G[S]:

S?aABbcd | ? A?ASd | ? B?SAh | eC | ? C?Sf | Cg | ?

(1) 求每个产生式的Predict集。 (2) 该文法是否为LL(1)文法?为什么? 答:(1)

Predict(S?aABbcd)={a} Predict(S? ?)={#,d,f,a,h } Predict(A?ASd)={a,d} Predict(A? ?)={h,a,d,b,e} Predict(B?SAh)={a,d,h} Predict(B? eC)={e} Predict(B? ?)={b} Predict(C?Sf)={a,f} Predict(C? Cg)={a,f,g} Predict(C? ?)={g,b}

(2)由于Predict(A?ASd)? Predict(A? ?)??,所以该文法不是LL(1)文法。 (1) S?(SS’ | ?

S’ ?) | ? (2) S?(S)S | ? (3) S?S(S)S | ? (4) S?(S | S’

S’?(S’) | ?

答:(1)不是,(2)是,(3)不是,(4)不是 3. 已知文法G[E]:

E?E+T | T T?T*F | F F?i | (E)

请按递归下降法构造该文法的语法分析程序。 答:求产生式的predict集合:

2. 下列描述括号匹配的文法中,哪些是LL(1)文法?

predict(E?E+T)={i,(} predict(E?T)={i,(} predict(T?T*F)={i,(} predict(T?F)={i,(}

6

由于文法中非终极符号E和T对应的产生式的predict集合的交集都不为空,所以该文E?TE’ E’?+TE’ | ? T?FT’ T’?*FT’ | ? F?i F?(E)

求新文法的predict集合: Predict(E?TE’)={(,i} Predict(E’?+TE’)={+} Predict(E’??)={#,)} Predict(T?FT’)={i,(} Predict(T’?*FT’)={*} Predict(T’??)={+,),#} Predict(F?i)={i} Predict(F?(E))={(}

由于以上文法中任意非终极符号对应的产生式的predict集合的交集都为空,所以满足Void E()

{ if(token?{(,i}) {T();E’();} else Error();} void E’()

{ if(token?{+}) {Match(‘+’);T();E’();} else if(token?{#,)}) {;} else Error();} void T()

{ if(token?{i,(}) {F();T’();} else Error();} void T’()

{ if(token?{*}) {Match(‘*’);F();T’();} else if(token?{+,),#}) {;} else Error();} void F()

{ if(token?{i}) {Match(‘i’);}

else if(token?{(}) {Match(‘(‘);E();Match(‘)’);} else Error();}

L={? | ?为字母表?上不包括两个相邻的1的非空串},其中?={0,1}。

法不满足自顶向下分析的条件,现对文法进行等价变换得到如下文法:

自顶向下分析的条件,所以可以写出如下的递归下降语法分析伪代码:

4. 构造一个LL(1)文法G,它能识别语言L: 并证明你所构造的文法是LL(1)文法。

7

答:A?0E | 1F

B?0E | 1F C?0E E?B | ? F?C | ?

Predict(A?0E)={0} Predict(A?1F)={1} Predict(B?0E)={0} Predict(B?1F)={1} Predict(E?B)={0,1} Predict(E??)={#} Predict(F?C)={0} Predict(F??)={#}

对任意非终极符号对应的产生式的predict集合的交集都为空,所以该文法是LL(1)文

法。

5. 已知文法G[A]为:

A?aABe | a B?Bb | d

(1) 试给出与G[A]等价的LL(1)文法G’[A]。

(2) 构造G’[A]的LL(1)分析表并给出输入串aade#的分析过程。 答:(1)所求G’[A]为:

A?aA’ A’?ABe A’? ?

B?dB’ B’?bB’ B’? ?

(1) (2) (3) (4) (5) (6)

Predict(A?aA’)={a} Predict(A’?ABe)={a} Predict(A’??)={#,d} Predict(B?dB’)={d} Predict(B’?bB’)={b} Predict(B’??)={e}

对任意非终极符号对应的产生式的predict集合的交集都为空,所以该文法是LL(1)文(3) 分析表如下: 法。 A A’ a (1) (2) b d (3) e # (3) 8

搜索更多关于: 编译原理课后习题答案 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

第三章 1. 词法分析器的功能是什么? 答:读源程序的字符序列,逐个拼出单词,并构造相应的内部表示TOKEN;同时检查源程序中的词法错误。 2. 试分析分隔符(空格、跳格及回车等)对词法分析的影响。 答:空格、跳格、回车等分隔符号对词法分析不起作用,可以删除。但是回车符号可以用于错误定位,所以在删除回车符号前需要统计回车的个数。 3. 给出识别C语言全部实型常数的自动机。 答:(+|-|?)([1-9][0-9]*|0)(.[0-9][0-9]*|?) (E(+|-|?)[0-9][0-9]*) 4. 写出识别C语言中所有单词的LEX程序。 答: L=[A-Z] | [a-z] D=[0-9] D1=[1-9] %% (L|_)(L|D|_)* {return (1);}

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com