zoukankan      html  css  js  c++  java
  • 递归下降语法分析程序

    文法G[E]

    E –> E + T | T

    T –> T + F | F

    F –> i | (E)

    消除左递归

    E –> TE’

    E’-> +TE’

    E’-> ε

    T –> FT’

    T’–> *FT’

    T’-> ε

    F -> i|(E)

    编码实现

    #include<iostream>

    using namespace std;

    void E();

    void E1();

    void T();

    void T1();

    void F();

    char ReadToken();

    bool Match(char a);

    void IsSuccess();

    char token;

    int cur = 0; // 当前字符索引

    char *str = "i+i*i+(i*i)#"; // 语句

    void main()

    {

        ReadToken();

       if(!Match('#'))

          E();

    }

    void E()

    {

       T();

       E1();

    }

    void T()

    {

       F();

       T1();

    }

    void E1()

    {

       if(Match('+'))

       {

          ReadToken();

          IsSuccess();

          T();

          E1();

       }

    }

    void T1()

    {

       if(Match('*'))

       {

          ReadToken();

          IsSuccess();

          F();

          T1();

       }

    }

    void F()

    {

       if(Match('('))

       {

          ReadToken();

          IsSuccess();

          E();

          if(Match(')'))

          {

            ReadToken();

            IsSuccess();

          }

          else

          {

            cout << "error" << endl;

          }

       }

       else if(Match('i'))

       {

          ReadToken();

          IsSuccess();

       }

       else if(Match('#'))

       {

          cout << "success" << endl;

       }

       else

       {

           cout << "error" << endl;

       }

    }

    char ReadToken()

    {

       return token = str[cur++];

    }

    bool Match(char ch)

    {

       if(token == ch)

          return true;

       return false;

    }

    void IsSuccess()

    {

       if(Match('#'))

       {

          cout << "success!" << endl;

          exit(0);

       }

    }

  • 相关阅读:
    抽象工厂模式
    工厂模式
    简单工厂模式
    查询功能测试的测试点汇总
    网卡设置 网卡的高级设置说明
    30道python真实面试题(搜集到的,看看其实都是基础)
    测试用例设计方法--正交试验法
    小游戏:乌龟吃鱼
    Tkinter 的三大布局管理器 pack、grid 和 place用法汇总
    Python中输出字体的颜色设置
  • 原文地址:https://www.cnblogs.com/CPFlying/p/1721913.html
Copyright © 2011-2022 走看看