算术表达式文法的语法分析(递归子程序法)
算术表达式文法的语法分析
——递归子程序法
一、实验内容
EE+T|T
对文法 TT*F|F 进行语法分析。
F(E)|i
二、程序源代码 (C++ )
/*文法可表示成 E -->TE'
* E'-->+TE'
* T -->FT'
* T'-->*FT'
* F -->i|(E)
*/
#include
#include
using namespace std;
void e();
void e1();
void t();
void t1();
void f();
string str;
char sym;
int p = 0;
bool result = true;
void advance()
{
cout << "advance()" << endl;
//如果是多位数,跳过后面的数字直接读数字后的运算符
if (isdigit(str[p]))
{
while (isdigit(str[p]))
{
p++;
}
1
}
else
{
p++;
}
sym = str[p];
}
void error()
{
result = false;
}
/*
* 主函数
*/
int main()
{
cin >> str;
sym = str[p];
e();
if (result)
{
cout << "Accept!" << endl << endl;
}
else
{
cout << "Error!" << endl << endl;
}
return 0;
}
void e()
{
cout << "e()" << endl;
t();
e1();
}
2
void e1()
{
cout << "e1()" << endl;
if (sym == '+')
{
advance();
t();
e1();
}
}
void t()
{
cout << "t()" << endl;
f();
t1();
}
void t1()
{
cout << "t1()" << endl;
if (sym == '*')
{
advance();
f();
t1();
}
}
void f()
{
cout << "f()" << endl;
if (isdigi