现在的位置: 首页 > 综合 > 正文

递归下降语法分析程序

2011年12月23日 ⁄ 综合 ⁄ 共 1067字 ⁄ 字号 评论关闭

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

   }

}

抱歉!评论已关闭.