LL(1)语法分析c++实现

本文介绍了如何使用C++实现一个LL(1)语法分析器,详细阐述了文法规则并提供了LL(1)分析表。通过设计一个符号栈,实现了进出栈操作,并在main方法中定义了LL(1)分析表。测试示例展示了如何对输入的语句进行验证,通过比较栈顶符号与当前字符,以及根据LL(1)分析表进行操作,完成语句的解析过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文法:
E->TD
D->+TD|ε
T->FC
C->*FC|ε
F->i
LL(1)分析表:
在这里插入图片描述
测试示例:
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;

typedef struct
{
   
    char data[10];
    int top;
    int num;
} message;//栈内元素对象 
void create(message*& m)
{
   
    m = (message*)malloc(sizeof(message));
    m->top = -1;
    m->num = 0;
}
void push(message*& m, char i)//进栈操作 
{
   
    if (m->top < 10)
    {
   
        m->top++;
        m->data[m->top] = i;
        m->num++;
    }
    else
        cout << "栈满";
}
char pop(message*& m)//出栈操作 
{
   
    char i;
    if (m->top != -1)
    {
   
        i = m->data[m->top];
        m->top--;
        m->num--;
        return i;
    }
    else
        cout << "栈空";
}
void getStr(char str[])//将输入的以$结尾的字符串 保存于字符串数组中 
{
   
    int j = 0;
    while (true)
    {
   
        cin >> str[j];
        if (str[j]
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值