语法分析报告

语法分析报告

ID:44668556

大小:307.23 KB

页数:13页

时间:2019-10-24

语法分析报告_第1页
语法分析报告_第2页
语法分析报告_第3页
语法分析报告_第4页
语法分析报告_第5页
资源描述:

《语法分析报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、语法分析一、实验目的编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。二、实验要求利用C语言编制递归下降分析程序,并对简单语言进行语法分析。2.1待分析的简单语言的语法用扩充的BNF表示如下:(1)v程序〉::=begin<语句串〉end(2)v语句$>::=v语句>{;v语句>}(3)v语句=v赋值语句〉⑷v赋值语句=ID:二V表达式>(5)v表达式〉::=v项〉{+v项>I-<项>}(6)<项>::=v因子>{*v因子>I/v因子〉(7)v因了=IDINUMI(v农达式〉)2.

2、2实验要求说明输入单词串,以“#”结束,如果是文法止确的句了,则输出成功信息,打印“success”,否则输出“error”。例如:输入begina:=9;x:=2*3;b:=a+xend#输出success!输入x:=a+b*cend#输出error2.3语法分析程序的酸法思想(1)主程序示意图如图2・1所示。置初值调用scaner读下一个单词符号调用Irparser图2-1语法分析主程序示意图(2)递归下降分析程序示意图如图2・2所示。(3)语句串分析过程示意图如图2・3所示。调用statement函数调用s

3、caner调丿IJstatement函数出错处理图2・3语句串分析示意图是▼打卬分析成功出错处理图2・2递归下降分析程序示意图(1)statement语句分析程序流程如图2・4、2-5>2-6>2・7所示。调用term函数出错处理

4、

5、{错处理图2-4statement语句分析函数示意图图2-5expression表达式分析函数示意图Hl错处理调用scancr调用scaner图2-7factor分析过程示意图三、语法分析程序的C语言程序源代码:#include"stdio.h"#includenstring.h"c

6、harprog[10014oken[8],ch;char*rwtab⑹={nbeginn,,'ir;,then',;,while,,,,,do,,,,,endn};intsyn,p,m,n,sum;intkk;factor();expression();yucu();term();statement();lrparser();scaner();main(){p=kk=O;printf(Hpleaseinputastring(endwith");do{scanf(n%cn,&ch);prog[p++]=ch

7、;}while(ch!=*#');P=0;scaner();lrparser();getch();}lrparser(){if(syn==l)scaner();yucu();/*读下一个单词符号*//*调用yucu()函数;*/if(syn==6){scaner();if((syn==O)&&(kk==O))printf("success!u);}else{if(kk!=l)printf("thestringhaven'tgota*end'!");kk=l;}}else{printf(”haventgot

8、a'begin'!、n”);kk=l;}return;}yucu(){statement();/*调用函数statement。;*/while(syn==26){scaner();/*读卜一个单词符号*/if(syn!=6)statement();/*调用函数statement();*/}return;}statement(){if(syn==10){scaner();/*读b一个单词符号*/if(syn==18){scaner();/*读下一个单词符号*/expression();/*调用函数statement

9、();*/else{printf("thesing*:='iswrong!H);kk=l;}}else{printf(Hwrongsentence!");kk=l;}return;}expression(){term();while((syn==13)ll(syn==14)){scaner();/*读下一个单词符号*/term();/*调用函数term();*/return;}term(){factor();while((syn==15)ll(syn==16)){scaner();/*读卜一个单词符号*/

10、factor();/*调用函数factor();*/return;factor(){if((syn==10)ll(syn==l1))scanerQ;elseif(syn==27){scaner();八读下一个单词符号*/expression();/*调用函数statement。;*/if(syn==28)scaner();/*读下一个单词符号*/else{printf(u

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。