zoukankan      html  css  js  c++  java
  • 作业十四——算符优先分析

    1.接上个作业(P121练习1),完成4),5)两个步骤。

    1)计算FIRSTVT和 LASTVT。

    2)找三种关系对。

    3)构造算符优先关系表。

    4)是否算符优先文法?

    5)给出输入串(a,(a,a))#的算符优先分析过程。

     3)算符优先关系表:

      a ^ ( ) , #
    a       > > >
    ^       > > >
    ( < < < = <  
    )       > > >
    , < < < > >  
    # < < <     =

    4)此文法是算符优先文法。

    5)给出输入串(a,(a,a))#的算符优先分析过程:

      关系 输入串 动作
    1  (a,(a,a))# 移进
    2 #(   a,(a,a))# 移进
    3 #(a > ,(a,a))# 归约
    4 #(N ,(a,a))#  移进
    5 #(N, < (a,a))# 移进
    6 #(N,( < a,a))# 移进 
    7 #(N,(a > ,a))# 归约
    8 #(N,(N < ,a))# 移进
    9 #(N,(N, < a))# 移进
    10 #(N,(N,a > ))# 归约
    11 #(N,(N,N > ))# 归约
    12 #(N,(N = ))# 移进
    13 #(N,(N) > )# 归约
    14 #(N,N > )# 归约
    15 #(N = )# 移进
    16 #(N) > # 归约
    17 #N   # 接受

    2.尝试编写自下而上的语法分析程序。

    可以只写表达式部分。

    void Isleft( )
    {
    
       Stack s;
      k=1;
      S[k]=’#’;
      do{ 
        a=S[k+1];
        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);
          k=j+1;
          S[k]=N;
        }
        if(S[j]<a || S[j]=a)
        {
    
           k=k+1;
          S[k]=a;
        }
      }while(a!=’#’);
    }

    3.给出下面语句的三元式、四元式和逆波兰式。

    a*b+(c-d)/e 

     答:

    三元式:

    (1)(*, a, b)

    (2)(-, c, d)

    (3)(/, (2), e)

    (4)(+, (1), (3))

    四元式:

    (1)(*, a, b, t1)

    (2)(-, c, d, t2)

    (3)(/, t2, e, t3)

    (4)(+, t1, t3, t4)

    逆波兰式:

    a*b+(c-d)/e →ab*cd-e/+

  • 相关阅读:
    Java数组分配内存空间
    Java中的数组
    Java中可变参数
    什么是方法的重载
    break语句与continue语句
    三大循环结构
    程序流程控制
    Java的运算符
    基本数据类型转换之向上转型和向下转换
    修改IIS虚拟目录名称
  • 原文地址:https://www.cnblogs.com/xiaolan-Lin/p/12015050.html
Copyright © 2011-2022 走看看