• 大小: 242KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-09-09
  • 语言: 其他
  • 标签: 活前缀  

资源简介

编译原理实验报告及源码,LR1 活前缀 字符串匹配

资源截图

代码片段和文件信息

#include
#include
#include
#include
#include
#include
//输入为扩广后的文法
//文法存储在g中
#define PROJECT_SET_SIZE 20
#define PROJECT_ID_POS 0
#define GRAMMER_ID_POS 1
#define GRAMMER_START_CHAR_POS 5
#define BFCHAR_POS 2
#define AFCHAR_POS 3
#define PROJECT_LEN_POS 4
#define ID 10000


struct grammer
{
char **g;
char vt[127];
char vn[27];
char s;
int line;
};

typedef struct
{
int id;
char ch;
}SElemType;

#include “stack.h“
// 文法的项目
struct gprjt
{
char **gp;//gp的格式为gp[1][0]为编号(从0开始),gp[1][2]字符数gp[i][1]圆点前的字符若无则为0,gp[i][2]为圆点后的字符,若无为0
char s;
int line;
};

typedef struct prjset
{
int id;//项目集编号,从10000开始,与项目编号(从0开始)区别
struct prjset *next;//指向下个项目集
char prjt[PROJECT_SET_SIZE+1];//PROJECT_SET_SIZE个单元存储项目的编号prjt[0]项目编号的个数
char pointafter[PROJECT_SET_SIZE+1];//圆点后的字符pointafter[0]字符个数
struct prjset *actorgo[PROJECT_SET_SIZE];
char pointbefore;
}prjset*pprjset;

struct head
{
prjset *I;//指向I0及第一个项目集
prjset *tail;
int size;//项目集的个数
};

struct From
{
int **form;
char vn[27];
char vt[127];
};

char DOT = ‘*‘;
grammer g;
gprjt project;
head root;
struct From form;
/////////////////////////////////////////////////
void Init();
void Quit();
void Input();
int OpenFile(char *s);
void CreateProjectSet();//构造文法的项目集
void Closure(prjset *prjset);//prjset指向项目集
int go(int rk prjset *prjset);//rk为项目编号,将rk的去向加入prjset指向的项目集中返回项目编号,若无,返回-1
int CreateAnalysisForm();//返回1,则LR(0)分析表创建成功;返回0,不成功
void PrintPojectSet();
void PrintForm();
void AnalysisProcess(char *s);
int IsInSet(char *s char ch);
void JoinSet(char *s char ch);
////////////////////////////////////////////////

void main()
{
int i;
char ch;
char filename[25];
char string[100];
Init();
re: printf(“==================== LR(0)语法分析 =====================\n\n您希望从文件读入文法请按1,退出请按0 \n“);
fflush(stdin);
ch = getche();
printf(“\n“);
    if(ch==‘0‘)
return;
if(ch==‘1‘)
{
printf(“请输入存放文法的文件名(XXX.txt) :“);
gets(filename);
if(!OpenFile(filename))
{
goto re;
}
}
CreateProjectSet();
PrintPojectSet();
CreateAnalysisForm();
/* if(!CreateAnalysisForm())
{
printf(“不是 LR(0) 文法 !\n“);
goto re;
}//if

*/
PrintForm();

re2:printf(“进行字符串匹配请按‘1‘退出请按‘0‘:“);
fflush(stdin);
printf(“请输入您的选择 : “);
ch = getche();
printf(“\n“);
if(ch == ‘1‘)
{
printf(“请输入要匹配的序列串(以 ‘#‘结尾):“);
gets(&string[1]);
string[0] = strlen(&string[1]);
i = string[0];
if(string[i] != ‘#‘)
{
string[i+1] = ‘#‘;
string[i+2] = ‘\0‘;
string[0]++;
}
AnalysisProcess(string);
goto re2;
}
else if(ch == ‘0‘)
{
Quit();
return ;
}
else 
goto re2;


}




void Init()
{
form.form = NULL;
form.vn[0] = form.vt[0] = 0;
root.I = root.tail = NULL;
root.size = 0;
}

void Quit()
{
if(root.I != NULL)
{
for(pprjset p=root.I; p!=NULL; p=p->next)
{
pprjset q = p-

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

     文件     239058  2011-07-16 17:28  实验3编译原理 LR1\LR实验报告册.docx

     文件      19458  2011-06-19 22:28  实验3编译原理 LR1\LR语法分析.cpp

     文件     204891  2011-06-19 22:28  实验3编译原理 LR1\LR语法分析.exe

     文件         29  2011-06-17 23:46  实验3编译原理 LR1\test.txt

     目录          0  2011-07-16 17:28  实验3编译原理 LR1

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

               463436                    5


评论

共有 条评论