教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 实用文档 >

词法分析编译原理实验报告_昆明理工大学

来源:网络收集 时间:2026-08-05
导读: 昆明理工大学信息工程与自动化学院学生实验报告 ( 2012 —2013 学年 第 上 学期 ) 课程名称:编译原理 开课实验室: 444 2012年 11 月 23 日 一、 实验目的及内容 实验目的: 设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 实验内容: 输

昆明理工大学信息工程与自动化学院学生实验报告

( 2012 —2013 学年 第 上 学期 )

课程名称:编译原理 开课实验室: 444 2012年 11 月 23 日

一、 实验目的及内容

实验目的: 设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 实验内容: 输入:源程序文件

输出:二元组(syn,token或sum)构成的序列(文件),其中:syn为单词种别码,token为存放的单词自身字符串,sum为整型常量。

1.关键字:main if else int while char 均为小写。 2.专用符号:= + - * / < <= > >= == != ; , { } ( ) 3.其他标记ID和NUM通过以下正则式定义: ID: letter(letter|digit)* NUM: digitdigit*

letter→a|b|c|d…|z|A|B|C…|Z digit →0|1|2|3|4|5|6|7|8|9

4.空格由空白、制表符、换行符组成,用来分隔ID、NUM、专用符号与关键字,词法分析阶段常被忽略。

5.各种单词符号对应的种别码如下表:

二、实验原理及基本技术路线图(方框原理图或程序流程图)

三、所用仪器、材料(设备名称、型号、规格等或使用软件) 1台PC及VISUAL C++6.0软件

四、实验方法、步骤(或:程序代码或操作过程)

#include <stdio.h> #include <string.h> char prog[80],token[8],ch; int syn,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)

{case 11:printf("( %-10d%5d )\n",sum,syn); break;

case -1:printf(""); getchar(); break;

default: printf("( %-10s%5d )\n",token,syn); break; }

}while(syn!=0); getchar(); return syn,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; } }

else if((ch>='0')&&(ch<='9')) { while((ch>='0')&&(ch<='9')) { sum=sum*10+ch-'0'; ch=prog[p++]; } p--; syn=20; }

else switch(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=prog[p++]; if(ch=='+') { syn=17; token[m++]=ch; } else { syn=22; p--; } break;

case '-':syn=23;

token[m++]=ch;

case '!':ch=prog[p++]; if(ch=='=') { syn=21; token[m++]=ch; } else { syn=37; p--; } break;

case '=':token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=36; token[m++]=ch; } else { syn=21; p--; } break; case '*': syn=24; token[m++]=ch; break;

case '/': syn=25; token[m++]=ch; break; case '(': syn=26; token[m++]=ch; break; case ')': syn=27; token[m++]=ch; break; case '{': syn=28; token[m++]=ch; break; case '}': syn=29; token[m++]=ch; break; case ';': syn=31; token[m++]=ch; break; case '@': syn=0; token[m++]=ch; break; default: syn=-1; break; }

token[m++]='\0'; return syn; }

五、实验过程原始记录( 测试数据、图表、计算等)

六、实验结果、分析和结论(误差分析与数据处理、成果总结等。其中,绘制曲线图时必

须用计算纸或程序运行结果、改进、收获)

刚开始时感觉很难,好像根本就编不成,所以甚至有些退缩,而之前上课时,老师讲这里时,好多同学就已经可以跟着老师的节奏回答了,自己自然感觉很急,一下课就跑去自习室好好看了看,可能是因为老师后来又讲了一遍的缘故吧,发现也并不是那么难了,按照严教师给的代码试着做了做,最后也就完成了任务。

说明对于困难我确实经常不自主地退缩,结果是受到影响,我不想这种事再屡次发生了,今后一定更加勇敢的去面对它。

注:教师必须按照上述各项内容严格要求,认真批改和评定学生成绩。

…… 此处隐藏:826字,全部文档内容请下载后查看。喜欢就下载吧 ……
词法分析编译原理实验报告_昆明理工大学.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1109495.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)