zoukankan      html  css  js  c++  java
  • 算符优先分析

    1. 已知算符优先关系矩阵如下表:

     

    +

    *

    i

    (

    )

    #

    +

    >

    <

    <

    <

    >

    >

    *

    >

    >

    <

    <

    >

    >

    i

    >

    >

       

    >

    >

    (

    <

    <

    <

    <

    =

     

    )

    >

    >

       

    >

    >

    #

    <

    <

    <

    <

     

    =

    关系 输入串 动作
    # < (i+i)*i# 移进
    #( < i+i)*i# 移进
    #(i > +i)*i# 归约
    #(N < +i)*i# 移进
    #(N+ < +i)*i# 移进
    #(N+i > )*i# 归约
    #(N+N > )*i# 归约
    #(N = )*i# 移进
    #(N) > *i# 归约
    #N < *i# 移进
    #N* < i# 移进
    #N*i > # 归约
    #N*N > # 归约
    #N   # 接受

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

    1)计算FIRSTVT和 LASTVT。

    2)找三种关系对。

    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   # 移进

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

    可以只写表达式部分。

    void Isleft( )
    {

       Stack s;
      k=1;
      S[k]=’#’;
      do{
        a=S[k+1]//把下一个输入符号读进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!=’#’);
    }

     

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

    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)

    t1:=a*b

    t2:=c-d

    t3:=t2/e

    t4:=t1+t3

    逆波兰式:ab*cd-/e+

  • 相关阅读:
    linux 解压命令
    在xampp集成环境下使用 thinkphp 连接oracle
    输入框实现新闻列表分页显示(一)
    MyEclipse获取注册码
    Oracle数据库创建表空间
    SQL Server之存储过程
    连接Oracle数据库帮助类
    Oracle数据库的导入和导出
    创建dml触发器
    java连接数据库步骤
  • 原文地址:https://www.cnblogs.com/hoioh/p/12036482.html
Copyright © 2011-2022 走看看