编译原理实验一.docx

编译原理实验一.docx

ID:59134954

大小:31.94 KB

页数:12页

时间:2020-09-12

编译原理实验一.docx_第1页
编译原理实验一.docx_第2页
编译原理实验一.docx_第3页
编译原理实验一.docx_第4页
编译原理实验一.docx_第5页
资源描述:

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

1、一、实验目的设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。二、基本知识1、正则表达式2、正则表达式到有限自动机的转换3、有限自动机的确定化与最小化三、实验环境1、Windows操作系统2、C/C++/Java语言四、实验要求1、做好实验预习,掌握并熟悉本实验中所使用的编程、测试环境及相应的软件2、写出实验报告五、实验内容1、待分析的C语言子集的词法1)关键字mainifelseintreturnvoidwhile(都是小写)2)专用符号=+—*/<<=<>===!=;:,{}[]()3)其他标记STRING::="[^"]*"ID::=letter(letter

2、digit

3、)*INT::=digitdigit*letter::=a

4、…

5、z

6、A

7、…

8、Zdigit::=0

9、…

10、94)空格由空白、制表符和换行符组成空格一般用来分隔ID、NUM、专用符号和关键字,词法分析阶段通常被忽略。2、部分单词符号对应的种别码单词符号种别码单词符号种别码main1:17int2:=18reture3<20if4<>21else5<=22end6>23lettet(letter

11、digit)*10>=24dightdight*11=25+13;26—14(27{15)28}16#03、词法分析程序的功能输入:所给文法的源程序字符串输出:二元组(syn,token或sum)构成的

12、序列。其中syn为单词种别码;token为存放的单词自身字符串;sum为整型常量(作为常量的值)。实现时,可将单词的二元组用结构进行处理设置3个变量:①token用来存放构成单词符号的字符串;②sum用来整型单词;③syn用来存放单词符号的种别码。4程序源代码#include#includecharprog[80],token[8],ch;intsyn,p,m,n,sum;char*rwtab[6]={"main","int","return","if","else","end"};voidscaner();main(){p=0;printf("

13、pleaseinputastring(endwith'#'):/n");do{scanf("%c",&ch);prog[p++]=ch;}while(ch!='#');p=0;do{scaner();switch(syn){case11:printf("(%-10d%5d)",sum,syn);break;case-1:printf("youhaveinputawrongstring");return0;default:printf("(%-10s%5d)",token,syn);break;}}while(syn!=0);return0;}//扫描查找函数voidscane

14、r(){sum=0;for(m=0;m<8;m++)token[m++]=NULL;ch=prog[p++];m=0;while((ch=='')

15、

16、(ch==''))ch=prog[p++];if(((ch<='z')&&(ch>='a'))

17、

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

19、

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

21、

22、((ch>='0')&&(ch<='9'))){token[m++]=ch;ch=prog[p++];}p--;syn=10;for(n=0;n<6;n++)if(strcmp(toke

23、n,rwtab[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=11;}elseswitch(ch){case'<':token[m++]=ch;ch=prog[p++];if(ch=='='){syn=22;token[m++]=ch;}else{syn=20;p--;}break;case'>':token[m++]=ch;ch=prog[p++];if(ch=='='){syn=24;tok

24、en[m++]=ch;}else{syn=23;p--;}break;case'+':token[m++]=ch;ch=prog[p++];if(ch=='+'){syn=17;token[m++]=ch;}else{syn=22;p--;}break;case'-':token[m++]=ch;ch=prog[p++];if(ch=='-'){syn=29;token[m++]=ch;}else{syn=23;p--;}break

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

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

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