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);

       }

    }

  • 相关阅读:
    业务逻辑安全之登陆认证模块
    linux下的tcpdump
    wirshark使用(二)
    wirshark 使用(一)
    MVC框架的代码审计小教程
    记一次发卡网代码审计
    HTML知识点(一)
    jQuery基础、效果和事件
    Ajax知识(二)
    jQueryHTML和插件、display和overflow和visibility的区别
  • 原文地址:https://www.cnblogs.com/CPFlying/p/1721913.html
Copyright © 2011-2022 走看看