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