编译原理实验报告-语法分析

编译原理实验报告-语法分析

ID:38632454

大小:256.00 KB

页数:13页

时间:2019-06-16

编译原理实验报告-语法分析_第1页
编译原理实验报告-语法分析_第2页
编译原理实验报告-语法分析_第3页
编译原理实验报告-语法分析_第4页
编译原理实验报告-语法分析_第5页
资源描述:

《编译原理实验报告-语法分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、语法分析实验报告一、实验目的1.编制一个递归下降分析程序。2.加深对语法分析程序原理的理解。二、实验要求1.待分析的简单语言的语法用扩充的EBNF表示如下:<语句>::=begin<语句>{;<语句>}end<语句>::=<赋值语句><赋值语句>::=IDENT:=<表达式><表达式>::=[+

2、-]<项>{(+

3、-)<项>}<项>::=<因子>{(*

4、/)<因子>}<因子>::=IDENT

5、NUMBER

6、(<表达式>)2.实验要求说明输入单词串,以“.”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”,最好能指出

7、错误原因。例如:输入begina:=2*3end.输入不能雷同输出success!输入beginx=4end.输出error!赋值语句左部标识符后面应是赋值号“:=”3.语法分析设计说明采用递归下降分析程序。为每个非终符编号一个子过程,各个非终结符过程调用关系如下:语句表达式项因子三.实验设计思路1)主程序示意图图1主程序示意图2)递归下降分析程序示意图图2递归下降分析程序示意图3)语句串分析过程示意图图3语句串分析过程示意图4)statement语句分析程序流程 图4statement语句分析函数示意图    图5expression表达式分析函数示意图

8、         图6term分析函数示意图图7factor分析过程示意图四、实验输出结果1.实验结果2.源代码#include"stdio.h"#include#include/*变量说明:line从终端读入的字符串;当前所指位置在计数器ptoken为存放的单词自身字符串;当前所指位置在计数器mnumber整型常数sym每个单词符号种类*/enumsymbol{period=0,ident,number,plus,minus,times,slash,eql,neq,lss,leq,gtr,geq,lparen,rp

9、aren,semicolon,becomes,beginsym,endsym,ifsym,thensym,whilesym,dosym,nil,};charline[80],token[8],ch;enumsymbolsym;intp,m,num;char*rwtab[6]={"begin","end","if","then","while","do"};intErr;voidgetsym();intblock();voidstatement();voidexpression();voidterm();voidfactor();voidmain(){//读

10、了字符串,直到遇.结束p=0;printf("pleaseinputastring(endwith'.'):");do{scanf("%c",&ch);line[p++]=ch;}while(ch!='.');line[p++]='';//逐个单词扫描;Err=0;p=0;getsym();//当前扫描的单词存放在sym中block();if((sym==0)&&(Err==0))printf("success!");}voidprintSym(inti){switch(i){case0://结束符.return;case2:printf("(

11、%-5d%10d)",sym,num);//NUMBERbreak;case23://printf("youhaveinputawrongstring");break;default:printf("(%-5d%10s)",sym,token);break;}}voidgetsym(){for(m=0;m<8;m++)token[m++]=NULL;ch=line[p++];m=0;while((ch=='')

12、

13、(ch==''))//略去空格,无效字符{ch=line[p++];}//字母打头的字符串:标识符if((ch<='z'&&ch

14、>='a')

15、

16、(ch<='Z'&&ch>='A')){while((ch<='z'&&ch>='a')

17、

18、(ch<='Z'&&ch>='A')

19、

20、(ch>='0'&&ch<='9')){token[m++]=ch;ch=line[p++];}p--;sym=ident;token[m++]='';//比较是否为保留字for(inti=0;i<6;i++){if(strcmp(rwtab[i],token)==0){switch(i){case0:sym=beginsym;break;case1:sym=endsym;break;case2:sym=i

21、fsym;break;case3:sym=thensym;brea

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

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

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