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

昆明理工大学_编译原理_实验一_词法分析器.doc

昆明理工大学_编译原理_实验一_词法分析器.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

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

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

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

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

--昆明理工大学信息工程与自动化学院学生实验报告(2011—2012学年第上学期)课程名称:编译原理开课实验室:4452011年12月14日年级、专业、班学号姓名成绩实验项目名称词法分析器指导教师严馨教师评语该同学是否了解实验原理:A.了解□B.基本了解□C.不了解□该同学的实验能力:A.强□B.中等□C.差□该同学的实验是否达到要求:A.达到□B.基本达到□C.未达到□实验报告是否规范:A.规范□B.基本规范□C.不规范□实验过程是否详细记录:A.详细□B.一般□C.没有□教师签名:年月日实验目的及内容实验目的:设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。实验内容:输入:源程序文件输出:二元组(syn,token或sum)构成的序列(文件),其中:syn为单词种别码,token为存放的单词自身字符串,sum为整型常量。1.关键字:mainifelseintwhilechar均为小写。2.专用符号:=+-*/<<=>>===!=;,{}()3.其他标记ID和NUM通过以下正则式定义:ID:letter(letter|digit)*NUM:digitdigit*letter→a|b|c|d…|z|A|B|C…|Zdigit→0|1|2|3|4|5|6|7|8|9空格由空白、制表符、换行符组成,用来分隔ID、NUM、专用符号与关键字,词法分析阶段常被忽略。各种单词符号对应的种别码如下表:二、实验原理及基本技术路线图(方框原理图或程序流程图)三、所用仪器、材料(设备名称、型号、规格等或使用软件)1台PC及VISUALC++6.0软件四、实验方法、步骤(或:程序代码或操作过程)#include<stdio.h>#include<string.h>charprog[80],token[8],ch;intsyn,p,m,n,sum;char*key[6]={"main","int","char","if","else","while"};scaner();main(){p=0;printf("词法分析\n请输入字串符,以“@”号结束:\n\n");do{scanf("%c",&ch);prog[p++]=ch;}while(ch!='@');p=0;do{scaner();switch(syn){case11:printf("(%-10d%5d)\n",sum,syn);break;case-1:printf("Youhaveinputawrongstring!!!\n\n");/*提示输入的字符串无法识别*/getchar();break;default:printf("(%-10s%5d)\n",token,syn);break;}}while(syn!=0);getchar();returnsyn,sum;}scaner(){sum=0;for(m=0;m<8;m++)token[m++]=NULL;ch=prog[p++];m=0;while((ch=='')||(ch=='\n'))ch=prog[p++];if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))){while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9'))){token[m++]=ch;ch=prog[p++];}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'<':token[m++]=ch;ch=prog[p++];if(ch=='='){syn=35;token[m++]=ch;}else{syn=33;p--;}break;case'>':token[m++]=ch;ch=prog[p++];if(ch=='='){syn=34;token[m++]=ch;}else{syn=32;p--;}break;case'+':token[m++]=ch;ch=