资源描述:
《编译原理上机三讲课讲稿.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、编译原理上机三精品文档学号成绩编译原理上机报告上机题目编写语法分析分析器上机时间11月18日学院信息与控制工程学院专业计算机科学与技术班级计算机1301班姓名周砚豪一、实验目的通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。1、选择最有代表性的语法分析方法,如LL(1)语法分析程序、算符优先分析程序和LR分析分析程序,并至少完成两个题目。2、选择对各种常见程序语言都用的语法结构,如赋值语句(尤指表达式)作为分析对象,并且与所选语法分析方法要比较贴切。二、实验过程(一)根据分析法总控制流程图,编写一个分析对
2、象的语法分析程序。可根据自己的能力选择以下三项(由易到难)之一作为分析算法中的输入:1.直接输入根据已知文法人工构造的分析表M。2.输入已知文法的集合FIRST(x)和FOLLOW(U),由程序自动生成该文法的分析表M。3.输入已知文法,由程序自动生成该文法分析表M。??(二收集于网络,如有侵权请联系管理员删除精品文档)程序具有通用性,即所编制的LL(1)语法分析程序能够适用于不同文法以及各种?输入单词串,并能判断该文法是否为算符文法和算符优先文法。??(三)有运行实例。对于输入的一个文法和一个单词串,所编制的语法分析程序应能正确地判断,此单词串是否为该文法的句子,并要求输出分析过程。?
3、?三、实验结果四、讨论与分析LL(1)文法的判定:对于文法G的每一个非终结符U的产生式:U→α1
4、α2
5、…
6、αn。如果文法G是一个LL(1)文法,则有SELECT(U→αi)∩SELECT(U→αj)=Ф(i≠j,i,j=1,2,…,n)。SELECT集的构造:SELECT(U→α)=?FIRST(α),当α不空FIRST(α)∪FOLLOW(U),否则LL(1)分析表构造算法:?对于每个产生式U→α,执行下一步骤:1、对于每个终结符号:a∈FIRST(α),M[U,a]=?→α?;?2、如果e∈FIRST(α?),对于每个终结符号:b∈FOLLOW(U),M[U,b]=?→α?;?3、
7、将其它未定义的分析元素置为ERROR。收集于网络,如有侵权请联系管理员删除精品文档四、附录:关键代码/*LL(1)分析法源程序,只能在VC++中运行*/#include<>#include<>#include<>#include<>charA[20];/*分析栈*/charB[20];/*剩余串*/charv1[20]={'i','+','*','(',')','#'};/*终结符*/charv2[20]={'E','G','T','S','F'};/*非终结符*/intj=0,b=0,top=0,l;/*L为输入串长度*/typedefstructtype/*产生式类型定义*/{cha
8、rorigin;/*大写字符*/chararray[5];/*产生式右边字符*/intlength;/*字符个数*/}type;typee,t,g,g1,s,s1,f,f1;/*结构体变量*/typeC[10][10];/*预测分析表*/voidprint()/*输出分析栈*/{收集于网络,如有侵权请联系管理员删除精品文档inta;/*指针*/for(a=0;a<=top+1;a++)printf("%c",A[a]);printf("tt");}/*print*/voidprint1()/*输出剩余串*/{intj;for(j=0;j
9、");for(j=b;j<=l;j++)printf("%c",B[j]);printf("ttt");}/*print1*/voidmain(){intm,n,k=0,flag=0,finish=0;charch,x;typecha;/*用来接受C[m][n]*//*把文法产生式赋值结构体*/='E';strcpy,"TG");=2;='T';strcpy,"FS");=2;='G';strcpy,"+TG");=3;='G';[0]='^';=1;='S';strcpy,"*FS");=3;='S';[0]='^';=1;='F';收集于网络,如有侵权请联系管理员删除精品文档s
10、trcpy,"(E)");=3;='F';[0]='i';=1;for(m=0;m<=4;m++)/*初始化分析表*/for(n=0;n<=5;n++)C[m][n].origin='N';/*全部赋为空*//*填充分析表*/C[0][0]=e;C[0][3]=e;C[1][1]=g;C[1][4]=g1;C[1][5]=g1;C[2][0]=t;C[2][3]=t;C[3][1]=s1;C[3][2]=s;C[3][4]=C[3]