资源描述:
《语法分析递归下降分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验报告课程名称:编译原理实验项目:语法分析专业班级:计算机科学与技术班姓名:学号:实验室号:实验组号:实验时间:批阅时间:指导教师:成绩:沈阳工业大学实验报告(适用计算机程序设计类)专业班级:计算机科淫与技术13()1班学号:姓名:实验名称:1•实验目的:编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检杳和结构分析。2•实验要求:1•待分析的简单语法的语法用扩充的BNF表示如下:(1)v程序〉::=beginv语句串>end(2)<语句串>=v语句>{:语句}(3)<语句>::二v赋值语句〉(4)v赋值语句〉::
2、=ID:=v表达式>(5)v表达死〉::=v项〉{+v项>1・<项>}(6)<项〉::=v因子>{*<因子>l/v因子>}(7)<因了=IDINUMI(<表达式〉)3•实验内容:输入单词串,以”#”结朿,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出”errorn例如:输入begina:=9;x:=2*3;b:=a+xend#输lL
3、success输入x:=a+b*cend#输出error4.程序运行结果EnterYourwords(endwith#):x:二a+b*cendifYourwords:x:=a+b
4、*cend(10,x)(1&:=)(10,a)(13,+)(10,b)(15,*)(10,c)(6,end)(0,tt)缺'begin错误图1程序运行结果EnterYourwords(.endwith:begina:=9;x:=2*3;b:=a+xend#Yourwords:begina:=9;x:=2*3;b:=a+xend(1,begin)(10,a)(1&:=)(11,9)(26,;)(10,x)(1&:=)(11,2)(15,*)(11,3)(26,;)(10,b)(1&:=)(10,a)(13,+)(10,x)(6,end)
5、(0,附success图2程序运行结果主要代码:#include#include#include#define_KEY_WORD_END"waitingforyourexpanding"typedefstruct{inttypenum;char*word;}WORD;charinput[255];chartoken[255]="H;intp_input;intp_token;charch;char*KEY_WORDS[]={nbegin^,4f^nthen^nwhile^ndo
6、^HendH,_KEY_WORD_END};WORD*scaner();voidlrParser();voidyucu();voidstatement();voidstatement();voidexpression();voidterm();voidfactor();intsyn;intkk;WORD*oneword=newWORD;voidmain(){intover=l;printf(HEnterYourwords(endwith#):”);scanf("%[A#]s",input);p_input=O;printf(HYour
7、words:%sH.input);while(over<1()()()&&over!=0){oneword=scaner();if(oneword->typenum<1000)printf(n(%d,%s)ronewor(l->typenum,oneword・>wonl);over=oneword->typenum;}p_input=0;oneword=scaner();lrParser();printf(Hpress#toexit:”);scanf("%[A#]s",input);}voidlrParser(){i
8、f(syn==l){oneword=scaner();yucu();if(syn==6)oneword=scaner();if(syn==O&&kk==O){printf("%s","success1');}else{if(kk!=l){printf(H%sH,n缺PncT错误J;kk=i;}else{printf(H%s,,,H缺'begin'错误”);kk=l;voidyucu(){statement();while(syn==26){oneword=scaner();statementO;}}voidstatement(){if
9、(syn==10){oneword=scaner();if(syn==18){oneword=scaner();expression();}else{printf(“%s”,”赋值号错误”);kk=l;}}else{pr