• 大小: 248KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-07-12
  • 语言: 其他
  • 标签: 预测  

资源简介

输入文法,求出文法的FIRST集和FOLLOW集,分析表,对文法进行分析。

资源截图

代码片段和文件信息

#include
#include
#include“stack.h“

int Number; //文法中表达式的个数
char a[10][20]; //储存文法
char str[100]; //储存字符串
int vt_num; //非终结符的个数
char vt[10]; //储存所有终结字符的数组(包括#)

typedef struct
{
char data[10]; //储存产生式的字符串
}table;
table M[10][10]; //LL(1)分析表

typedef struct
{
char data[20]; //FIRST集各元素
int length; //FIRST集元素个数
bool flag; //判断FIRST集是否完整
}First;

typedef struct //文法的所有FIRST集
{
First ft[10];
}FIRST;

typedef struct
{
char data[20]; //FOLLOW集各元素
int length; //FOLLOW集元素个数
bool flag; //判断FOLLOW集是否完整
}Follow;

typedef struct //文法的所有FOLLOW集
{
Follow fw[10];
}FOLLOW;

void Input()
{
char ch;
int ij=0;
printf(“注: 大写字母表示非终结字符,其余字符为终结字符。\n“);
printf(“输入文法产生式的个数:\n“);
scanf(“%d“&Number);
printf(“输入文法:(例如 S->aS|b)\n(输入‘#‘表示产生式输入完毕)\n“);
ch=getchar();
for(i=0;i {
j=0;
while(ch!=‘#‘) //输入‘#‘表示一个表达式输入完毕
{
if(ch!=‘\n‘) a[i][j++]=ch;
ch=getchar();
}
a[i][j]=ch;
ch=getchar(); //得到的字符是换行字符
}
printf(“输入字符串:(输入‘#‘表示字符串输入完毕)\n“);
ch=getchar();i=0;
while(ch!=‘#‘) //输入‘#‘表示字符串输入完毕
{
if(ch!=‘\n‘) str[i++]=ch;
ch=getchar();
}
str[i]=ch;
printf(“输入所有非终结符的个数:\n“);
scanf(“%d“&vt_num);
printf(“输入各个非终结符:\n“);getchar();
for(i=0;i}

void OutputData() //输出输入的数据
{
int j;
printf(“输出刚输入的数据:\n“);
for(int i=0;i {
for(j=0;a[i][j]!=‘#‘;j++) putchar(a[i][j]);
putchar(‘\n‘);
}
j=0;
while(str[j]!=‘#‘) putchar(str[j++]);
putchar(‘\n‘);
for(j=0;j putchar(‘\n‘);
}

void DelChar_FT(FIRST &FTint k) //删除第k个FIRST集中重复的字符
{
if(FT.ft[k].length==0||FT.ft[k].length==1)  return;
for(int i=0;i {
for(int j=i+1;j {
if(FT.ft[k].data[j]==FT.ft[k].data[i])
{
for(int r=j;r FT.ft[k].length--;
j--;
}
}
}
}

void DelChar_FW(FOLLOW &FWint k) //删除第k个FOLLOW集中重复的字符
{
if(FW.fw[k].length==0||FW.fw[k].length==1)  return;
for(int i=0;i {
for(int j=i+1;j {
if(FW.fw[k].data[j]==FW.fw[k].data[i])
{
for(int r=j;r FW.fw[k].length--;
j--;
}
}
}
}

void PrintFirst(FIRST FT) //输出文法的FIRST集
{
printf(“输出FIRST集:\n“);
for(int i=0;i {
printf(“FIRST(%c)={ “a[i][0]);
for(int j=0;j printf(“}\n“);
}
}

void PrintFollow(FOLLOW FW) //输出文法的FOLLOW集
{
printf(“输出FOLLOW集:\n“);
for(int i=0;i {
printf(“FOLLOW(%c)={ “a[i][0]);
for(int j=0;j printf(“}\

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      43008  2010-05-05 22:03  预测分析法\Debug\预测分析法.exe

     文件     406980  2010-05-05 22:03  预测分析法\Debug\预测分析法.ilk

     文件     429056  2010-05-05 22:03  预测分析法\Debug\预测分析法.pdb

     文件         69  2010-05-05 19:11  预测分析法\测试数据.txt

     文件       7898  2010-05-05 22:03  预测分析法\预测分析法\Debug\BuildLog.htm

     文件         67  2010-05-05 22:03  预测分析法\预测分析法\Debug\mt.dep

     文件      52224  2010-05-05 22:03  预测分析法\预测分析法\Debug\vc90.idb

     文件      69632  2010-05-05 22:03  预测分析法\预测分析法\Debug\vc90.pdb

     文件        663  2010-05-05 21:40  预测分析法\预测分析法\Debug\预测分析法.exe.embed.manifest

     文件        728  2010-05-05 21:40  预测分析法\预测分析法\Debug\预测分析法.exe.embed.manifest.res

     文件        621  2010-05-05 22:03  预测分析法\预测分析法\Debug\预测分析法.exe.intermediate.manifest

     文件      39426  2010-05-05 22:03  预测分析法\预测分析法\Debug\预测分析法.obj

     文件        835  2010-05-05 21:11  预测分析法\预测分析法\stack.h

     文件       9933  2010-05-05 22:03  预测分析法\预测分析法\预测分析法.cpp

     文件       3987  2010-05-05 16:37  预测分析法\预测分析法\预测分析法.vcproj

     文件       1427  2010-05-10 02:51  预测分析法\预测分析法\预测分析法.vcproj.PC2009111513DQB.Administrator.user

     文件     732160  2010-05-10 02:51  预测分析法\预测分析法.ncb

     文件        911  2010-05-05 00:46  预测分析法\预测分析法.sln

    ..A..H.      8704  2010-05-10 02:51  预测分析法\预测分析法.suo

     目录          0  2010-05-05 22:03  预测分析法\预测分析法\Debug

     目录          0  2010-05-05 21:40  预测分析法\Debug

     目录          0  2010-05-05 22:03  预测分析法\预测分析法

     目录          0  2010-05-05 12:50  预测分析法

----------- ---------  ---------- -----  ----

              1808329                    23


评论

共有 条评论