第一范文网 - 专业文章范例文档资料分享平台

编译原理课后习题答案

来源:用户分享 时间:2025/5/30 15:36:07 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

第三章

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

搜索更多关于: 编译原理课后习题答案 的文档
编译原理课后习题答案.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c35rem3hwqo6i8ss1cmvz_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top