1 / 42
文档名称:

LL1语法分析程序实验报告.doc

格式:doc   大小:136KB   页数:42页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

LL1语法分析程序实验报告.doc

上传人:AIOPIO 2021/1/15 文件大小:136 KB

下载得到文件列表

LL1语法分析程序实验报告.doc

文档介绍

文档介绍:
(1)对输入文法,它能判断是否为LL(1)文法,若是,则转(2);否则报错并终止;
 (2)输入已知文法,由程序自动生成它的LL(1)分析表;
(3)对于给定的输入串,应能判断识别该串是否为给定文法的句型。
2.分析
该程序可分为如下几步:
(1)读入文法
(2)判断正误 
(3)若无误,判断是否为LL(1)文法
(4)若是,构造分析表;
(5)由总控算法判断输入符号串是否为该文法的句型。
有效?
读入文法
开始
3.流程图

是LL(1)文法?
结束
报错
判断句型
ﻩ是

/*******************************************
语法分析程序
作者:龚勋   刘栋   罗晓波
学号:2 2 2
计科系 13班
********************************************/
#include<stdlib.h>
#include<stdio.h>
#include<string。h>
/*******************************************/
int count=0;         /*分解的产生式的个数*/
int number;        /*所有终结符和非终结符的总数*/
char start;          /*开始符号*/
char termin[50];    /*终结符号*/
char non_ter[50];     /*非终结符号*/
char v[50];        /*所有符号*/
char left[50];     /*左部*/
char right[50][50];     /*右部*/
char first[50][50],follow[50][50];    /*各产生式右部的FIRST和左部的FOLLOW集合*/
char first1[50][50];    /*所有单个符号的FIRST集合*/
char select[50][50];     /*各单个产生式的SELECT集合*/
char f[50],F[50];    /*记录各符号的FIRST和FOLLOW是否已求过*/
char empty[20];       /*记录可直接推出^的符号*/
char TEMP[50];        /*求FOLLOW时存放某一符号串的FIRST集合*/
int validity=1;      /*表示输入文法是否有效*/
int ll=1;      /*表示输入文法是否为LL(1)文法*/
int M[20][20];     /*分析表*/
char choose;        /*用户输入时使用*/
char empt[20];    /*求_emp()时使用*/
char fo[20];        /*求FOLLOW集合时使用*/
/*******************************************
判断一个字符是否在指定字符串中
********************************************/
int in(char c,char *p)
{
ﻩint i;
if(strlen(p)==0)
ﻩ return(0);
ﻩfor(i=0;;i++)
{ﻩ
ﻩ if(p[i]==c)
ﻩreturn(1);   /*若在,返回1*/
ﻩif(i==strlen(p))
return(0);     /*若不在,返回0*/
ﻩ}

/*******************************************
得到一个不是非终结符的符号
********************************************/
char c()
{
ﻩchar c='A’;
   while(in(c,non_ter)==1)
c++;
return(c);
}
/****************************************