您的位置:首页 > 其它

递归下降语法分析程序

2010-04-27 12:38 218 查看
文法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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: