基本信息
项目名称: 文法分析器
编译语言:C++
运行环境:Devcpp
操作系统:Windows 10
项目内容
1 题目
对如下课本《编译原理(第3版)》P100,第3题,用递归下降法写出分析程序,输入两个符号串进行测试,一个符号串为符合文法的句子,另一个不是该文法的句子。
-
例题 3. 已知文法G[S]:
-
S->MH | a
H->LSo |ε
K->dML |ε
L->eHf
M->K | bLM -
判断G是否是LL(1)文法,如果是,构造LL(1)分析表。
2 程序代码
main.cpp
/*
项目名称:三级项目1 文法分析器
学号: xxxxxxxx
姓名:汕大学长
班级:19计算机
时间:2021/12/19
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define STACK_INIT_SIZE 100 //存储空间初始分配两
#define STACKINCREMENT 10 //存储空间分配增量
//------------栈 结构定义与功能函数-----------//
typedef struct{
char *base;
char *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S); //初始化一个空栈
int Push(SqStack &S, char e); //插入元素
int Pop(SqStack &S, char &e); //弹出元素
int InitStack(SqStack &S){
//构造一个空栈S
S.base = (char *)malloc(STACK_INIT_SIZE * sizeof(char));
if(!S.base)exit(OVERFLOW); //存储分配失败
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return 1;
} //InitStack
int Push(SqStack &S, char e){
//插入元素e为新的栈顶元素
if(S.top - S.base>=S.stacksize){
//栈满,追加存储空间
S.base = (char *)realloc(S.base,
(S.stacksize+STACKINCREMENT) * sizeof(char));
if(!S.base)exit(OVERFLOW); //存储分配失败
S.top = S