昆明理工大学 编译原理 实验二 语法分析器.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:11 大小:119KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

昆明理工大学 编译原理 实验二 语法分析器.doc

昆明理工大学编译原理实验二语法分析器.doc

预览

免费试读已结束,剩余 1 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

--昆明理工大学信息工程与自动化学院学生实验报告(2011—2012学年第1学期)课程名称:编译原理开课实验室:4452011年12月19日年级、专业、班计科093学号200910405310姓名孙浩川成绩实验项目名称语法分析器指导教师严馨教师评语该同学是否了解实验原理:A.了解□B.基本了解□C.不了解□该同学的实验能力:A.强□B.中等□C.差□该同学的实验是否达到要求:A.达到□B.基本达到□C.未达到□实验报告是否规范:A.规范□B.基本规范□C.不规范□实验过程是否详细记录:A.详细□B.一般□C.没有□教师签名:年月日实验目的及内容实验目的:编制一个语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析。实验内容:在上机(一)词法分析的基础上,采用递归子程序法或其他适合的语法分析方法,实现其语法分析程序。要求编译后能检查出语法错误。已知待分析的C语言子集的语法,用EBNF表示如下:<程序>→main()<语句块><语句块>→‘{’<语句串>‘}’<语句串>→<语句>{;<语句>};<语句>→<赋值语句>|<条件语句>|<循环语句><赋值语句>→ID=<表达式><条件语句>→if‘(‘条件’)’<语句块><循环语句>→while’(‘<条件>’)‘<语句块><条件>→<表达式><关系运算符><表达式><表达式>→<项>{+<项>|-<项>}<项>→<因子>{*<因子>|/<因子>}<因子>→ID|NUM|‘(’<表达式>‘)’<关系运算符>→<|<=|>|>=|==|!=二、实验原理及基本技术路线图(方框原理图或程序流程图)三、所用仪器、材料(设备名称、型号、规格等或使用软件)1台PC以及VISUALC++6.0软件四、实验方法、步骤(或:程序代码或操作过程)#include<iostream>#include<string>usingnamespacestd;charprog[80],token[8];charch;intsyn,p,m,n,sum,k=0;char*key[6]={"main","int","char","if","else","while"};voidscaner();voidlrparser();voidyucu();voidstatement();voidexpression();voidterm();voidfactor();voidmain(){p=0;cout<<"语法分析"<<endl;cout<<"请输入字符串,以“@”结尾:"<<endl;do{ch=getchar();prog[p++]=ch;}while(ch!='@');p=0;scaner();lrparser();}voidscaner(){sum=m=0;for(n=0;n<8;n++)token[n]=NULL;ch=prog[p++];while(ch=='')ch=prog[p++];if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){while((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch>='0'&&ch<='9')){token[m++]=ch;ch=prog[p++];}token[m++]='\0';p--;syn=10;for(n=0;n<6;n++)if(strcmp(token,key[n])==0){syn=n+1;break;}}elseif(ch>='0'&&ch<='9'){while(ch>='0'&&ch<='9'){sum=sum*10+ch-'0';ch=prog[p++];}p--;syn=20;}elseswitch(ch){case'<':m=0;token[m++]=ch;ch=prog[p++];if(ch=='<'){syn=33;token[m++]=ch;}elseif(ch=='='){syn=35;token[m++]=ch;}break;case'>':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=34;token[m++]=ch;}else{syn=32;p--;