资源简介
编译原理实验:非递归预测分析;对LL1文法进行预测分析、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、////////////////////////////////////////////////////////////////
代码片段和文件信息
#include
#include
#include
#include
using namespace std;
char termin[7]={‘#‘‘;‘‘+‘‘*‘‘(‘‘)‘‘i‘}; /*终结符号*/
char non_ter[8]={‘p‘‘P‘‘e‘‘t‘‘E‘‘f‘‘T‘‘S‘}; /*非终结符号*/
char Yy_pushtab[13][3]= /*逆序存放产生式右部内容*/
{
{‘P‘‘;‘‘E‘}
{‘p‘}
{‘\0‘}
{‘E‘‘t‘}
{‘\0‘}
{‘E‘‘t‘‘+‘}
{‘\0‘}
{‘T‘‘f‘}
{‘T‘‘f‘‘*‘}
{‘\0‘}
{‘)‘‘e‘‘(‘}
{‘i‘}
{‘p‘}
};
int Yy_d[8][7]= //LL1分析表
{
{-10-1-10-10}
{21-1-11-11}
{-14-1-1343}
{-1-1-1-17-17}
{-165-1-16-1}
{-1-1-1-110-111}
{-1998-19-1}
{-112-1-112-112}
};
bool is_Vt(char xchar y[])//判断是否为终结符
{
int i;
for(i=0;i {
if(y[i]==x)
return(1); //若是,返回1
}
return(0); //若不是,返回0
}
/*******************************************
主函数
********************************************/
void main()
{ int ijkpqwhat_to_do;
char chre;
char W[20]=“S“S[20]=“S“str[20]st[20];
printf(“\n 请输入该文法的句型:“);
scanf(“%s“st);
for(int a=0;a<=strlen(st);a++)
{
r=st[a];
if(isdigit(r))
str[a]=‘i‘;
else str[a]=st[a];
}
st[strlen(st)]=‘#‘;
i=strlen(str);
// str[i]=‘#‘;
// str[i+1]=‘\0‘;
j=0;
ch=str[j];
cout< while(S[0]!=‘\0‘)//分析栈非空则继续
{for(q=0;S[q]!=‘\0‘;q++)
W[q]=S[q];
W[q]=‘\0‘;
if(is_Vt(S[strlen(S)-1]termin))//栈顶为终结符
{
what_to_do=-1;
if(S[strlen(S)-1]!=ch)//栈顶与输入符号不等
{
printf(“\n分析结果:该符号串不是文法的句型!\n“);
return;
}
else
{
S[strlen(S)-1]=‘\0‘;
j++;
ch=str[j];
}
}
else //栈顶为非终结符
{
for(i=0;;i++)//获得Yy_d[][]的第一个下标
if(non_ter[i]==S[strlen(S)-1])
break;
for(k=0;;k++)//获得Yy_d[][]的第二个下标
{
if(termin[k]==ch)
break;
if(k==strlen(termin))//输入符号不是终结符
{
printf(“词法错误!“);
return;
}
}
what_to_do=Yy_d[i][k];
if(what_to_do==-1)
{
printf(“语法错误!“);
return;
}
else //把栈顶元素弹出 再把右部压栈
{
if(Yy_pushtab[what_to_do][0]==‘\0‘)
S[strlen(S)-1]=‘\0‘;
else
{int mn;
n=strlen(S)-1;
m=n;
for(int h=0;h S[n++]=Yy_pushtab[what_to_do][h];
S[m+strlen(Yy_pushtab[what_to_do])]=‘\0‘;
}
}
}
printf(“ %s “W);
for(p=j;p printf(“%c“st[p]);
if(what_to_do>=0)
printf(“ %d“what_to_do);
printf(“ \n“);
}
printf(“\n分析结果:该符号串是文法的句型.\n“);
return;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 127 2009-06-08 19:59 LL1文法.txt
文件 3110 2009-04-27 21:36 LL1.cpp
----------- --------- ---------- ----- ----
3237 2
相关资源
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
- c++ 虚拟摄像头
- hook,捕获所有案件,查找所有窗口,
- C语言课设计算器
- c++ 简易贪吃蛇源码
- 高精度加法(c++代码)
- C++调用百度地图案例
- 北京化工大学计算方法(C/C++)讲义
- 基于VC++的SolidWorks二次开发SolidWorks
- c++ 模拟鼠标按键
- OFD编辑器
- Beginning C++17 From Novice to Professional
- C++ STL实现
- opencv手部轮廓识别以及轨迹识别
- 百度C++编码规范
- C++ sql2008 WebServer通讯.docx
- c++ 定时关机程序源码
- 基于VSCode和CMake实现C++开发
- c++语法查询工具
- c++ 账务系统源码
- GBT 28169-2011 嵌入式软件 C语言编码规范
- c++ 猜拳小游戏
- XUnZip Zip解压缩.rar
评论
共有 条评论