欢迎来到天天文库
浏览记录
ID:47568072
大小:274.00 KB
页数:43页
时间:2020-01-15
《编译原理词法分析,语法分析实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、......编译原理实验报告一.LL(1)文法分析1.设计要求(1)对输入文法,它能判断是否为LL(1)文法,若是,则转(2);否则报错并终止;(2)输入已知文法,由程序自动生成它的LL(1)分析表;(3)对于给定的输入串,应能判断识别该串是否为给定文法的句型。2.分析该程序可分为如下几步:(1)读入文法(2)判断正误(3)若无误,判断是否为LL(1)文法(4)若是,构造分析表;(5)由总控算法判断输入符号串是否为该文法的句型。有效?读入文法开始3.流程图是是LL(1)文法?结束报错判断句型是学习好帮手......4.源程序/*********************
2、**********************语法分析程序作者:xxx学号:xxx********************************************/#include#include#include/*******************************************/intcount=0;/*分解的产生式的个数*/intnumber;/*所有终结符和非终结符的总数*/charstart;/*开始符号*/chartermin[50];/*终结符号*/charnon_ter[
3、50];/*非终结符号*/charv[50];/*所有符号*/charleft[50];/*左部*/charright[50][50];/*右部*/charfirst[50][50],follow[50][50];/*各产生式右部的FIRST和左部的FOLLOW集合*/charfirst1[50][50];/*所有单个符号的FIRST集合*/charselect[50][50];/*各单个产生式的SELECT集合*/charf[50],F[50];/*记录各符号的FIRST和FOLLOW是否已求过*/charempty[20];/*记录可直接推出^的符号*/charT
4、EMP[50];/*求FOLLOW时存放某一符号串的FIRST集合*/intvalidity=1;/*表示输入文法是否有效*/intll=1;/*表示输入文法是否为LL(1)文法*/intM[20][20];/*分析表*/charchoose;/*用户输入时使用*/charempt[20];/*求_emp()时使用*/charfo[20];/*求FOLLOW集合时使用*//*******************************************判断一个字符是否在指定字符串中*****************************************
5、***/intin(charc,char*p){inti;if(strlen(p)==0)学习好帮手......return(0);for(i=0;;i++){if(p[i]==c)return(1);/*若在,返回1*/if(i==strlen(p))return(0);/*若不在,返回0*/}}/*******************************************得到一个不是非终结符的符号********************************************/charc(){charc='A';while(in(c,non_te
6、r)==1)c++;return(c);}/*******************************************分解含有左递归的产生式********************************************/voidrecur(char*point){/*完整的产生式在point[]中*/intj,m=0,n=3,k;chartemp[20],ch;ch=c();/*得到一个非终结符*/k=strlen(non_ter);non_ter[k]=ch;non_ter[k+1]=' ';for(j=0;j<=strlen(point)-
7、1;j++){if(point[n]==point[0]){/*如果‘
8、’后的首符号和左部相同*/for(j=n+1;j<=strlen(point)-1;j++){while(point[j]!='
9、'&&point[j]!=' ')temp[m++]=point[j++];left[count]=ch;memcpy(right[count],temp,m);right[count][m]=ch;right[count][m+1]=' ';m=0;count++;学习好帮手......if(point[j]=='
10、'){n=j+1;break;
此文档下载收益归作者所有