资源简介
通过C语言编写一个语法分析器采用递归下降分析法编写语法分析程序及LL(1)语法分析法编写语法分析程序。附上实验报告。
代码片段和文件信息
#include
#include
#include
#define N 100
int seekProd(int stackTopint inputstrTop);
//char inputstr[10]=“i*i+i#“;
char inputstr[20];
char stack[10]=““;
typedef struct production{
char leftChar;
char rightChars[4];
char allChars[8];
}Prod;
Prod productions[8];
void init();
int stackPush(int *top Prod prod);
int matching(int *top char *inputstr);
int main()
{
int len;//输入串的长度
int stackTop=1;
int inputstrTop=0;
int i;
char *z=“#“;
int index=0;
init();//产生式初始化
stack[0]=‘#‘;
stack[stackTop]=‘E‘;
printf(“请输入字符串:“);
gets(inputstr);
len=strlen(inputstr);
inputstr[len]=‘#‘;
while( stackTop>=0 )
{
// printf(“%d%d\n“stackTopinputstrTop);
printf(“第%2d步:“++index);
printf(“当前栈:%-8s“stack);
printf(“输入字符串:%8s“inputstr);
//根据栈定元素和字符串首字母
if(matching(&stackTopinputstr)){
printf(“\n“);
}else{
i=seekProd(stackTopinputstrTop);
stackPush(&stackTopproductions[i]);//压栈
printf(“进行下一步所用的产生式:%s\n“productions[i].allChars);
}
}
if(stackTop+1==0)
{
printf(“分析成功!\n“);
}
return 0;
}
//搜索分析表
int seekProd(int stackTopint inputstrTop)
{
// printf(“stack[stackTop]=%c\n“stack[stackTop]);
if(stack[stackTop]==‘E‘){
if(inputstr[inputstrTop]==‘i‘)
{
return 0;
}else if(inputstr[inputstrTop]==‘(‘){
return 0;
}else{
return -1;
}
}else if(stack[stackTop]==‘X‘){
if(inputstr[inputstrTop]==‘+‘)
{
return 1;
}else if(inputstr[inputstrTop]==‘)‘){
return 2;
}else if(inputstr[inputstrTop]==‘#‘){
return 2;
}else{
return -1;
}
}else if(stack[stackTop]==‘T‘){
if(inputstr[inputstrTop]==‘i‘)
{
return 3;
}else if(inputstr[inputstrTop]==‘(‘){
return 3;
}else{
return -1;
}
}else if(stack[stackTop]==‘Y‘){
if(inputstr[inputstrTop]==‘+‘)
{
return 5;
}else if(inputstr[inputstrTop]==‘*‘){
return 4;
}else if(inputstr[inputstrTop]==‘)‘){
return 5;
}else if(inputstr[inputstrTop]==‘#‘){
return 5;
}else{
return -1;
}
}else if(stack[stackTop]==‘F‘){
if(inputstr[inputstrTop]==‘i‘){
return 7;
}else if(inputstr[inputstrTop]==‘(‘){
return 6;
}else{
return -1;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-04-17 16:13 语法分析器\
文件 4907 2017-04-17 16:13 语法分析器\语法分析器代码.c
文件 75776 2017-04-12 22:49 语法分析器\语法分析器实验报告.doc
- 上一篇:词法分析器C语言编写附实验报告
- 下一篇:回到原点的骑士游历问题代码
相关资源
- 页面置换算法(fifolruopt) C语言编写
- 编译原理用C++消除左递归
- 实现语法分析器-编译原理
- 03 C#与C++dll互相传递字符串.rar
- Labview调用C++ dll之字符串数组传递
- C语言编写的中文分词程序
- 语法分析器 tiny语言语法分析
- C++语法分析器
- 自编八皇后问题递归、非递归算法
- 用C语言编写的分形树
- C语言编写的乒乓球游戏
- 经典的分形入门程序-Koch曲线的递归算
- 用C语言编写的电梯控制程序有界面显
- c++实现socket:一个服务器对应多个客
- C语言在vc下编写的Windows窗口小程序
- C语言编写的跨平台线程库
- 用C语言编写的经典小游戏
- 变频器源码 DSPIC30F5015电机控制专用芯
- C语言编写双人剪刀石头布联机游戏代
- C#调用C++的dll,回调函数,string和in
- 06.什么是递归.wmv目前数据结构最好的
- C语言编写TCP服务器
- socket C语言编写 客户端和服务器端程
- 编译原理LL1文法的mfc实现含消除左递
- c语言编写的hmm的程序
- cpp-Craft使用现代OpenGL用C语言编写的一
- 安徽大学操作系统实验四主存空间的
- 数据结构大作业 快递系统 C语言
- 功能完善的俄罗斯方块程序(C语言编
- LL1语法分析器(c++)
评论
共有 条评论