语法分析
语法分析
代码实现
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define PII pair<int, int>
using namespace std;
const int N = 110;
int k, t, j;
int mod = 1e9 + 7;
string a[N];
void pd1()
{
if (!isalpha(a[k][j]) && !isdigit(a[k][j]) && a[k][j] != '_')
t = 1;
j++;
}
void bl1()
{
if (j == a[k].size())
return;
pd1();
bl1();
}
void bl()
{
j = 0;
pd1();
bl1();
k++;
} // 判断是否是变量
void pd2()
{
if (!isdigit(a[k][j]))
t = 1;
j++;
}
void sz1()
{
if (j == a[k].size())
return;
pd2();
sz1();
}
void sz()
{
j = 0;
pd2();
sz1();
k++;
} // 判断是否是数值
void fz()
{
bl();
if (a[k] != "=")
t = 1;
k++;
sz();
if (a[k] != ";")
t = 1;
if (t)
cout << "这不是赋值语句" << endl;
else
cout << "这是赋值语句" << endl;
} // 赋值语句判断
void br1()
{
bl();
if (a[k] != "==" && a[k] != ">" && a[k] != "<" && a[k] != ">=" && a[k] != "<=" && a[k] != "!=")
t = 1;
k++;
bl();
}
void zx1()
{
bl();
if (a[k] != "=")
t = 1;
k++;
sz();
}
void br()
{
if (a[k] != "(")
t = 1;
k++;
br1();
if (a[k] != ")")
t = 1;
k++;
} // 判断是否是布尔表达式
void zx()
{
if (a[k] != "{")
t = 1;
k++;
zx1();
if (a[k] != ";")
t = 1;
k++;
if (a[k] != "}")
t = 1;
} // 判断是否是执行语句
void pd()
{
if (a[k] != "if")
t = 1;
k++;
br();
zx();
if (t)
cout << "这不是if判断语句" << endl;
else
cout << "这是if判断语句" << endl;
} // if语句判断
void xh1()
{
if (a[k] != "while")
t = 1;
k++;
br();
zx();
if (t)
cout << "这不是while循环语句" << endl;
else
cout << "这是while循环语句" << endl;
} // while语句判断
void xh2(){
if(a[k] != "do") t = 1;
k++;
zx();
if(a[k] != "while") t = 1;
k++;
br();
if (t)
cout << "这不是do-while循环语句" << endl;
else
cout << "这是do-while循环语句" << endl;
}
void matt()
{
int i = 0;
while (cin >> a[i++]);
if (a[k] == "if")
pd();
else if (a[k] == "while")
xh1();
else if (a[k] == "do")
xh2();
else
fz();
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T = 1;
// cin >> T;
while (T--)
{
matt();
}
return 0;
}
输出情况





浙公网安备 33010602011771号