资源简介
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
相关资源
- C++获取计算机的CPU ID,硬盘序列号等
- C++头文件转delphi工具 + 源码
- C语言编程常见问题解答.pdf
- GD32通过规则组寄存器 DMA获取多组AD
- 基于MFC的TCP调试助手源码95706
- 国际象棋的qt源代码
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- 基于mfc的多线程文件传输
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 利用C++哈希表的方法实现电话号码查
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 移木块游戏,可以自编自玩,vc6.0编写
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
评论
共有 条评论