语法分析

语法分析

代码实现

#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;
}

输出情况




posted @ 2024-12-16 14:13  取不出名  阅读(16)  评论(0)    收藏  举报