编译原理:语法树,短语,直接短语,句柄

1.已知文法:

S->a|^|(T)

T->T,S|S

分析句型(T,(^,a)),求全部的短语、直接短语和句柄。

 解析:根据题意,语法树如下图:

  

    全部短语:(T,(^,a))  T,(^,a)  (^,a)  ^,a  ^  a

    直接短语:^  a

    句柄:^

2.构造上下文无关文法,描述语言:

{anbn|n>=0}

{ambn|m>=n>=0}

 if语句

{(ab)n|n>=0}

{ambn|m,n>=1}

  if语句

解析:

    (1)G[S]:S -> aSb | ab | ε

 (2)G[S]:S -> aSb | a | ε

 (3)if语句 -> if<条件>then<语句> | if<条件>then<语句>else<语句>

   (4)G[S]:S -> aSb | aaSbb | ... | (ab)| ε

      由S产生任意多个相同数量的a和b

   (5)G[S]:S -> aS|Sb | a | ε

      由S产生任意多个a和任意多个b,a和b的个数都大于1个

3.如果if语句的方法:

stmt->if expr then stmt

     | if expr then stmt else stmt

     | other

其中other代表语言中其他语句。

a)证明该文法是具有二义性的。

b)构造一个等价的无二义性文法,使得else与前面最近的没有匹配的then匹配。

c)基于该文法构造一个语法制导翻译模式,将条件语句翻译改成堆栈机代码。

 

句子if E1 then if E2 then S1 else S2是否有两棵不同的语法树?说明了什么?

a)二义性证明

根据文法:我们发现 if E1 then if E2 then S1 else S2 有2棵语法树(2个推导方法)如下所示:

b)等价无二义性文法构造,使else说最近未匹配的then相匹配

 

 

 

 

 

posted @ 2019-09-19 18:40  琴时  阅读(1564)  评论(0编辑  收藏  举报