资源描述:
《自下而上分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、自下而上分析实验二语法分析(自下而上分析)一、实验目的通过自C动手编写语法分析器,掌握上下文无关文法、推导的基木概念、口下而上分析方法,理解如何理论联系实际以及明白理论与实际的差别。二、实验任务1.使作C/C++程序设计语言和递归下降子程序的方法编写该函数的词法分析器。要求设计一个语法分析器的测试小程序來调用R己编写的语法分析器测试各种不同的输入。2.语法分析的任务是在词法分析基础上,根据语言的语法规则,把语法符号分解成各类语法单位。语法分析所依据的是语言的语法规则,语法规则通常用上下文无关文法描
2、述。三、实验环境VC++6.0四、运行结果五、程序实现#include#inelude#ineludestructstack{stack*top;charvalue;};charpop(stack*pst){chare;if(pst->top~pst){printf(/zThestackisnull.,z);return0;else!e=pst->top->valuo;pst->top--;returne;}}voidpush(stack*ps
3、t,chare){pst->top++;pst-〉top->vedue二e;}voidprintstack(stack*pst){stack*printtemp=pst;while(printtcmp<=(pst->top)){printf(〃%c",printtemp->value);printtemp++;}}voidprintstring(stack*pst)!stack*prinltemp=(psl->t()p);while(printtemp>=pst)!printfprinttemp-
4、>value);printtemp-一;voidprintSLR(int&numbelstack*status,stack*grammar,stack*string)!printf(z/%d“,number);printstack(status);printf(““);printstack(grammar);printfC'“);printstring(strin£);printfC“);number++;intmain()Istack*string二(stack*)malloc(40);stri
5、ng->top二string;string-〉top->value=‘;stack*status二(stack*)malloc(40);status-〉top二status;status->top->value=,0,;stack*grammar^(stack*)malloc(40);grammar->top=grammar;grammar-〉top-〉value二';FILE*fp;fp二fopen("C:\fj.txt","a+");charfilestring[10][20]={, ,}
6、;charstr[10]={, J};intstringnumbor=0;intnumber二0;while(!feof(fp))fgets(filestring[stringnumber],23,fp);if(filestring[stringnumber][0]!二')stringnumber++;}for(inti二0;i<=(stringnumber-1);i++){for(intj=strlen(filestring[i])-3;j>=0;j--)if(filestring[i][
7、j]!=')push(string,filestring[i][j]);printf(,z此次分析的字符串为:%sz,,filestring[i]);printfC步骤状态栈符号栈输入串ACTION〃);printSLR(numbor,status,grammar,string);printfr移进〃);while(string->top->value!=,){charch=pop(string);if(ch='i'){push(grammar,ch);if(status->top
8、->value==,0,)printSLR(number,status,grammar,string);printff归约〃);pop(status);pop(grammar);push(status,'3,);push(grammar,'F');printSLR(number,status,grammar,string);printf(z,!/」约〃);pop(status);pop(grammar);push(status,'2,);push(grammar,'T‘);