编译原理第3章答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三章文法和语言

5. 写一文法,使其语言是偶正整数的集合

要求:

(1)允许0打头

(2)不允许0打头

解:

(1)G[S]=({S,P,D,N},{0,1,2,…,9},P,S)

P:

S→PD|D

P->NP|N

D→0|2|4|6|8

N->0|1|2|3|4|5|6|7|8|9

(2)G[S]=({S,P,R,D,N,Q },{0,1,2,…,9},P,S)

P:

S→PD|P0|D

P->NR|N

R->QR|Q

D→2|4|6|8

N->1|2|3|4|5|6|7|8|9

Q->0|1|2|3|4|5|6|7|8|9

6. 已知文法G:

<表达式>::=<项>|<表达式>+<项>|<表达式>-<项>

<项>::=<因子>|<项>*<因子>|<项>/<因子>

<因子>::=(<表达式>)|i。

试给出下述表达式的推导及语法树。

(1)i; (2)(i) (3)i*i;

(4)i*i+i; (5)i+(i+i); (6)i+i*i。

解:

(1)v=<表达式>=><项>=><因子>=>i=w

(2)v=<表达式>=><项>=><因子>=>(<表达式>)=>(<项>)=>(<因子>)=>(i)=w

(3)v=<表达式>=><项>=><项>*<因子>=><因子>*<因子>=>i*i=w

(4)v=<表达式>=><表达式>+<项>=><项>+<项>=><项>*<因子>+<项>

=><因子>*<因子>+<因子>=>i*i+i=w

(5)v=<表达式>=><表达式>+<项>=><项>+<项>=><因子>+<因子>=>i+(<表达式>)

=> i+(<表达式>+<项>)=>i+(<项>+<项>)=> i+(<因子>+<因子>)=>i+(i+i)=w

(6)v=<表达式>=><表达式>+<项>=><项>+<项>=><因子>+<项>=>i+<项>

=>i+<项>*<因子>=> i+<因子>*<因子>=> i+i*i=w

语法树见下图:

7. 为句子i+i*i 构造两棵语法树,从而证明下述文法G[<表达式>]是二义的。 <表达式>::=i|(<表达式>)|<表达式><运算符><表达式> <运算符>::=+|-|*|/

解:为句子i+i*i 构造的两棵语法树如下:

所以,该文法是二义的。

<表达式> <项> <因子> i

<表达式> <项> <因子> ( <表达式> )

<项> <因子> i

<表达式> <项>

<项> * <因子>

<因子> i

i

<表达式>

<表达式> + <项> <

项> <项> * <因子> <因子> i

i

<因子> i

<表达式>

<表达式> + <项> <项> <因子> i

<因子> ( <表达式> )

<表达式> + <项> <项> <因子>

i

<因子> i

<表达式>

<表达式> + <项> <项> <因子> i

<项> * <因子> <因子> i

i

(1)i (2)(i) (3)i*i (4) i*i+i (5) i+(i+i) (6) i+i*i <表达式> <表达式> + <表达式> i <表达式> * <表达式> i i <表达式>

<表达式> * <表达式>

<表达式> + <表达式> i i

i

8. 习题1中的文法G[S]是二义的吗?为什么?

答:是二义的。因为对于句子abc 可以有两种不同的生成树,即:S=>Ac=>abc 和S=>aB=>abc 11. 令文法G[E]为: E →T|E+T|E-T T →F|T*F|T/F F →(E)|i

证明E+T*F 是它的一个句型,指出这个句型的所有短语、直接短语和句柄。 解:可为E+T*F 构造一棵语法树(见下图),所以它是句型。

从语法树中容易看出,E+T*F 的短语有:

T*F 是句型E+T*F 的相对于T 的短语,也是相对于规则T →T*F 的直接短语。 E+T*F 是句型E+T*F 的相对于E 的短语。 句型E+T*F 的句柄(最左直接短语)是T*F 。

12. 下述文法G[E]生成的语言是什么?给出该文法的一个句子,该句子至少含五个终结符,构造该句子的语法树。证明:是G[]的句型,并指出该句型的所有短语、直接短语和句柄。 | | →a|b|c →+|- →*|/ 解:

(1)计算文法G[E]的语言:

由于L(T)={(a|b|c)((a|b|c)(*|/))n

|n>=0}

所以L(E)={L(T)(L(T)(+|-))n |n>=0}

(2)该文法的一个句子是aab*+,它的语法树是:

(3) 证明:是G[]的句型,并指出该句型的所有短语、直接短语和句柄。

由于下面的语法树可以生成,所以它是G[]的句型。

E

E + T

T * F

a a

b *

+

相关文档
最新文档