编译原理词法分析器实验报告.doc

上传人:飞****2 文档编号:52202121 上传时间:2022-10-21 格式:DOC 页数:8 大小:138.75KB
返回 下载 相关 举报
编译原理词法分析器实验报告.doc_第1页
第1页 / 共8页
编译原理词法分析器实验报告.doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《编译原理词法分析器实验报告.doc》由会员分享,可在线阅读,更多相关《编译原理词法分析器实验报告.doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、一、实验目的设计一个简单的词法分析器,从而进一步加深对词法分析器工作原理的理解。二、实验要求1、该个词法分析器要求至少能够识别以下几类单词:(1)关键字:else if int return void while共6个,所有的关键字都是保留字,并且必须是小写;(2)标识符:识别与C语言词法规定相一致的标识符,通过下列正则表达式定义:ID = letter (letter | digit)*;(3)常数:NUM = digit digit*(.digit digit* |)(e(+ | - |) digit digit* |),letter = a|.|z|A|.|Z|,digit = 0|.|

2、9,包括整数,如123等;小数,如123.45等;科学计数法表示的常数,如1.23e3,2.3e-9等;(4)专用符号:+ - * / = = != = ; , ( ) /* */;2、分析器的输入为由上述几类单词构成的程序,输出为该段程序的机内表示形式,即关键字、运算符、界限符变为其对应的机内符,常数使用二进制形式,标识符使用相应的标识符表指针表示。3、词法分析器应当能够指出源程序中的词法错误,如不可识别的符号、错误的词法等。三、实验环境实验环境为win7系统、vs2005。四、实验内容1、词法分析程序的功能:输入:所给文法的源程序字符串。输出:二元组(syn,token)或(sum或fsu

3、m,对应二进制)构成的序列。其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数;fsum为浮点型常数。2、各种单词符号种别码如下表:单词符号种别码 单词符号种别码119if2=20int3=21return4=22void5!=23while6;24lettet(letter|digit)*10,25整型常量11(26浮点常量12)27+13281429*1530/163117/*32=18*/33五、主要函数说明1、程序全局变量char inputstr300,token8;/分别存放程序段、构成单词符号的字符串char ch;/输入字符int syn;/单词字

4、符的种别码int p;/缓冲区inputstr的指针int sum;/整型常量float fsum;/浮点型常量char *rwtab6=else,if,int,return,void,while;/关键字数组2、语法分析函数void scaner()该函数完成所有的语法分析,对于输入的程序片段,首先去掉空格和换行,然后逐字符分析,找出各个单词(存入token8),判别它们的类型(确定syn值,如果是整数则是sum值,如果是浮点数则是fsum)。此函数的主要流程图如下:变量初始化忽略空格程序是否结束? 返回 是 是拼字符串是否关键字?syn为对应关键字的单词种别码syn=10报错否字母 数字

5、其他拼数运算符、 符号界符等符号返回对不同符号给出相应的syn值是否含小数点? 否 是Syn=12syn=111void scaner() sum=0; for(m=0;m8;m+)tokenm+=NULL; ch=inputstrp+;/printf(%-d,p); m=0; while(ch= )|(ch=n)ch=inputstrp+;/去掉空格和换行 if(ch=a)|(ch=A)/识别标识符 while(ch=a)|(ch=A)|(ch=0)&(ch=9) tokenm+=ch; ch=inputstrp+; p-; syn=10; for(n=0;n=0)&(ch=0)&(ch=0

6、)&(ch=0)&(ch=0)&(ch=0)&(ch=9) fn=fn*10+ch-0; tokenm+=ch;ch=inputstrp+; p-; po=pow(base,-fn);/printf(%-f %f %d,fsum,po,fn); fsum=fsum*po;else/printf(bbbbbbbbbbb);syn=-1;/p-;/ch=inputstrp+;printf(%-s,ch); 3、主函数主函数中,首先接收用户输入的程序段,将其存入全局变量inputstr中。接着调用scaner()函数,循环直到分析完所有字符。每次循环中,判断syn的值,如果是11就输出整数,如果是1

7、2就输出浮点数,如果是1则表示出错退出程序,默认是输出标识符、界符等。scaner();/分析= switch(syn) case 11:printf( %-10s,token); bit_print(sum);/输出整数 printf( )n); break; case 12:printf( %-10s,token); float_bit_print(fsum);/输出浮点数 printf( )n); case -1:printf(出错!错在%-sn,token);/出错 exit(0); default: printf( %-10s%5d )n,token,syn);/输出标识符、界符等 break;六、实验结果1、整体测试输入以下程序段,得到的结果如图1:void main()float a=3.14,b=4.56;float sum;sum=a+b;printf(“%f”,sum);图12、测试注释的识别输入一段带注释的程序,测试结果如图2:图2七、实验总结本程序实现了词法分析的功能,能对用户输入的程序段进行词法分析,达到了实验要求。通过实验,加深了对词法分析过程的理解,了解了词法分析程序的工作原理。但该程序有一些不足,比如实现比较简单,某些地方与预期运行结果可能有些出入。8

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁