资源简介
C语言实现的LR(0)语法分析器程序,能用于大多数LR型文法分析,程序只需局部修改就可使用。
代码片段和文件信息
/**
此程序识别的为LR(0)语法分析器
文法为:
(0) S‘->S
(1) S->aRST
(2) S->aR
(3) R->+
(4) T->b
识别的输入语句为:a+a+b
如有其它文法和输入语句大体程序不用改,只需修改部分数字,重新构造action表与goto表即可使用。
作者:wang jia meng
时间:2013-4-16
学校:CUMT
*/
#include
#include
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define X 8
#define Y1 4
#define Y2 3
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
typedef struct
{
char key;
int data;
}Array;
typedef Array Action[X][Y1];
typedef Array Goto[X][Y2];
SqStack *StateStack *SignStack;
int k=0;
char a[]={‘a‘‘+‘‘a‘‘+‘‘b‘‘#‘};
int Gotofind(intcharGoto);
void InitActionAndGoto(Action AGoto G)
{
/*action表 说明:将规约定在<10的数字,将移进定在>=10的数字*/
A[0][0].key=‘a‘;A[0][1].key=‘+‘;A[0][2].key=‘b‘;A[0][3].key=‘#‘;
A[0][0].data=2;A[0][1].data=-1;A[0][2].data=-1;A[0][3].data=-1;
A[1][0].key=‘a‘;A[1][1].key=‘+‘;A[1][2].key=‘b‘;A[1][3].key=‘#‘;
A[1][0].data=-1;A[1][1].data=-1;A[1][2].data=-1;A[1][3].data=0;
A[2][0].key=‘a‘;A[2][1].key=‘+‘;A[2][2].key=‘b‘;A[2][3].key=‘#‘;
A[2][0].data=-1;A[2][1].data=4;A[2][2].data=-1;A[2][3].data=-1;
A[3][0].key=‘a‘;A[3][1].key=‘+‘;A[3][2].key=‘b‘;A[3][3].key=‘#‘;
A[3][0].data=2;A[3][1].data=-1;A[3][2].data=20;A[3][3].data=20;
A[4][0].key=‘a‘;A[4][1].key=‘+‘;A[4][2].key=‘b‘;A[4][3].key=‘#‘;
A[4][0].data=30;A[4][1].data=-1;A[4][2].data=30;A[4][3].data=30;
A[5][0].key=‘a‘;A[5][1].key=‘+‘;A[5][2].key=‘b‘;A[5][3].key=‘#‘;
A[5][0].data=-1;A[5][1].data=-1;A[5][2].data=7;A[5][3].data=-1;
A[6][0].key=‘a‘;A[6][1].key=‘+‘;A[6][2].key=‘b‘;A[6][3].key=‘#‘;
A[6][0].data=-1;A[6][1].data=-1;A[6][2].data=10;A[6][3].data=10;
A[7][0].key=‘a‘;A[7][1].key=‘+‘;A[7][2].key=‘b‘;A[7][3].key=‘#‘;
A[7][0].data=-1;A[7][1].data=-1;A[7][2].data=40;A[7][3].data=40;
/*goto表*/
G[0][0].key=‘S‘;G[0][1].key=‘R‘;G[0][2].key=‘T‘;
G[0][0].data=1;G[0][1].data=-1;G[0][2].data=-1;
G[1][0].key=‘S‘;G[1][1].key=‘R‘;G[1][2].key=‘T‘;
G[1][0].data=-1;G[1][1].data=-1;G[1][2].data=-1;
G[2][0].key=‘S‘;G[2][1].key=‘R‘;G[2][2].key=‘T‘;
G[2][0].data=-1;G[2][1].data=3;G[2][2].data=-1;
G[3][0].key=‘S‘;G[3][1].key=‘R‘;G[3][2].key=‘T‘;
G[3][0].data=5;G[3][1].data=-1;G[3][2].data=-1;
G[4][0].key=‘S‘;G[4][1].key=‘R‘;G[4][2].key=‘T‘;
G[4][0].data=-1;G[4][1].data=-1;G[4][2].data=-1;
G[5][0].key=‘S‘;G[5][1].key=‘R‘;G[5][2].key=‘T‘;
G[5][0].data=-1;G[5][1].data=-1;G[5][2].data=6;
G[6][0].key=‘S‘;G[6][1].key=‘R‘;G[6][2].key=‘T‘;
G[6][0].data=-1;G[6][1].data=-1;G[6][2].data=-1;
G[7][0].key=‘S‘;G[7][1].key=‘R‘;G[7][2].key=‘T‘;
G[7][0].data=-1;G[7][1].data=-1;G[7][2].data=-1;
}
int InitStack(SqStack *s)
{
s->base=(int *)malloc(STACK_INIT_SIZE * sizeof(int));
if(!s->base)
return ERROR;
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return OK;
}
template
int Push(SqStack *s T e)
{
if((s->top-s->base)>=s->stacksize)
{
s->base=(int *) realloc (s->base(s->stacksize+STACKINCREMENT)*sizeof(int))
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-04-16 19:52 语法分析三\
目录 0 2013-04-16 19:52 语法分析三\Debug\
文件 33792 2013-04-16 19:51 语法分析三\Debug\vc60.idb
文件 53248 2013-04-16 19:51 语法分析三\Debug\vc60.pdb
文件 184380 2013-04-16 19:51 语法分析三\Debug\语法分析三.exe
文件 263688 2013-04-16 19:51 语法分析三\Debug\语法分析三.ilk
文件 11218 2013-04-16 19:51 语法分析三\Debug\语法分析三.obj
文件 211060 2013-04-16 01:02 语法分析三\Debug\语法分析三.pch
文件 451584 2013-04-16 19:51 语法分析三\Debug\语法分析三.pdb
文件 5447 2013-04-16 19:52 语法分析三\语法分析三.cpp
文件 3451 2013-04-15 21:29 语法分析三\语法分析三.dsp
文件 528 2013-04-15 23:54 语法分析三\语法分析三.dsw
文件 41984 2013-04-16 19:52 语法分析三\语法分析三.ncb
文件 49664 2013-04-16 19:52 语法分析三\语法分析三.opt
文件 1279 2013-04-16 19:51 语法分析三\语法分析三.plg
相关资源
- STM32仿造FX3U-14MT-2AD2DA1CAN.rar
- MFC框架 网络版五子棋 包含游戏大厅
- 运动车辆检测跟踪源码,可运行
- C++模板元编程.pdf(清晰版)
- MFC读取RTSP视频流
- ISOIEC 14882 2017.pdf
- mfc制作的圆形时钟
- 数字图像处理与机器视觉(Visual C++与
- 五子棋大作业源码 .zip
- Excel-demo
- 无限重启C++程序
- gcc&gcc;-c++4.8version
- 新华三C语言笔试题18年两套.rar
- C++ 即时聊天工具
- 核线影像纠正C++代码程序
- 基于mfc的smtp客户端程序
- 《深入体验VC++项目开发》源代码
- Effective C++ and More Effective C++全书签中
- 邓俊辉数据结构C++语言版第3版 + 习题
- MFC CCriticalSection 关键段
- C语言进阶_重点、难点与疑点解析-完
-
SuperMap iob
jects C++ 8C 最佳路径分析 - C/C++常用算法手册(全)
- VS2017实现Tcp socket多线程通信C++
- 基于C语言的台球小游戏超详细注释
- vc6++安装包
- VC++6.0 安装包,及Windows10安装解决方案
- Visualc++ 6.0中文稳定破解版
- 数据探测法检验粗差C++实现
- C++语言程序设计 第4版 学生用书郑莉
评论
共有 条评论