zoukankan      html  css  js  c++  java
  • 编译原理:语法树,短语,直接短语,句柄

    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相匹配

     

     

  • 相关阅读:
    swagger配置
    windows下安装redis
    Redis在windows下安装过程
    jenkins安装部署全过程
    MySQL表名不区分大小写的设置方法
    Linux常用命令
    java 执行redis的部分方法
    把jar包加入本地maven库内
    Java 枚举7常见种用法
    【转】每天一个linux命令(1):ls命令
  • 原文地址:https://www.cnblogs.com/zhif97/p/11551691.html
Copyright © 2011-2022 走看看