编译原理之算符优先分析

一. 什么是算符文法?应满足什么条件

  • 算符文法
    设有一个文法G,若G中有形如U->Vw的产生式,即它的任意产生式的右部都不含两个相继的非终结符,则称G为算数文法,或称为OG文法。

  • 算符优先文法
    (1)是自上而下分析法中的一种,虽然他不是规范规约,但具有分析速度快的特点,是和表达式分析。
    (2)算符优先分析法就是仿照算数四则运算的运算过程。定义任意两个相继出现的终结符号a和b之间的优先关系,一点确定了这种优先关系,就可以用他确定“句柄”进行规约。

二. 算符文法中,相邻算符之间的优先关系有几种?如何定义?

设G是不含ε-产生式的文法,对任何终结符a,b∈VT,A,B,C∈VN

  1. a优先级高于b: a > b,a先于b被规约
  2. a优选级等于b: a = b,a与b同时被规约
  3. a优先级低于b: a < b,a后于b被规约

三. 如何构造优先关系矩阵?

1. FIRSTVT集、LASTVT集的定义及构造方法;

定义FirstVT§={a|P(+=>)a···或P(+=>)Qa···,a属于终结字符集,而Q属于非终结字符集},其中···表示所有字符集
LastVT(P)={a|P(+=>)···a或P(+=>)···aQ,a属于终结字符集,而Q属于非终结字符集}

  • 由以下两条规则来构造FirstVT集:
  1. 若有产生式P=>a···、或P=>Qa···,则a属于FirstVT(P);
  2. 若有a属于FirstVT(Q),且有产生式P=>Q···,则a属于FirstVT§;# 四. 算符优先分析法最左可规约串的确定
  • 类似的有构造LastVT集的规则:
  1. 若有产生式P=>···a或P=>···aQ,则a属于LastVT集。
  2. 若a属于LastVT(Q),且有产生式P=>···Q,则a属于LastVT(P)集。

2. 构造优先关系矩阵的算法?举例加以讲解;

在这里插入图片描述

四. 算符优先分析法最左规约串的确定

1. 最左素短语的定义是什么?

  • 素短语:某文法句型的短语它至少包含有一个终结符号,并且除它之外,不再包含任何更小的素短语。
  • 最左素短语:任意句型最左边的素短语。

2. 最左素短语的特征?如何根据其特征确定当前句型的最左可归约串?

在这里插入图片描述

3. 什么是“单非产生式”,算符优先分析法进行规约为什么速度快?

  • 右部仅有一个非终结符的产生式
  • 比用文法的优先关系矩阵节省内存,若有n个终结符号,优先关系矩阵占内存为(n+1)2,优先函数为2(n+1);
  • 编程时便于比较运算,即用一般的关系运算即可;

五. 算符优先分析法总控程序的工作流程及伪代码

1. 工作流程

  1. 定义两个相继出现的终结符a 和b 的优先关系
  2. 确定要规约的句型的最左素短语
  3. 将最左素短语规约

2. 伪代码

void Isleft( )
{  Stack s;
   k=1;
   s[k]=’#’;
   do{   把下一个输入符号读进a中;
            if (S[k]∈VT)   j=k;
            else                j=k-1;
            while(S[j]>a)
            {  do{    Q=S[j];
                         if(S[j-1] ∈VT)   j=j-1;
                        else                   j=j-2;
                    }while(S[j]>Q);
              把S[j+1]…S[k]归约为某个N;
              k=j+1;
             S[k]=N;
            }
           if(S[j]<a || S[j]=a)
           {   k=k+1;
               S[k]=a;
            }
          }while(a!=’#’);
}

  • 9
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值