欢迎来到天天文库
浏览记录
ID:13227161
大小:37.50 KB
页数:10页
时间:2018-07-21
《实验一词法分析器的设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验一词法分析器的设计一、实验目的(1)学会针对转换图实现相应的高级语言源程序。(2)深刻领会状态转换图的含义,逐步理解有限自动机。二、实验内容(1)某计算机语言的编译程序的词法分析部分实现。(2)从左到右扫描每行该语言源程序的符号,拼成单词,换成统一的内部表示(token),送给语法分析程序。三、实现原理程序中先判断这个句语句中每个单元为关键字、常数、运算符、界符,对与不同的单词符号给出不同编码形式的编码,用以区分之。PL/0语言的EBNF表示<常量定义>::=<标识符>=<无符号整数>;<标识符>::=<字母>={<字母>
2、<数字>};<加法运算符>::=+
3、-<乘法运算符>:
4、:=*
5、/<关系运算符>::==
6、#
7、<
8、<=
9、>
10、>=<字母>::=a
11、b
12、…
13、X
14、Y
15、Z<数字>::=0
16、1
17、2
18、…
19、8
20、9四、设计过程1.关键字:void,main,if,then,break,int,Char,float,include,for,while,printfscanf并为小写。2."+”;”-”;”*”;”/”;”:=“;”:”;”<“;”<=“;”>“;”>=“;”<>“;”=“;”(“;”)”;”;”;”#”为运算符。3.其他标记如字符串,表示以字母开头的标识符。4.空格符跳过。5.各符号对应种别码关键字分别对应1-13运算符分别对应401-418,501-
21、513。字符串对应100常量对应200结束符#五、心得体会其实匹配并不困难,主要是C++知识要求相对较高,只要把握住指针就好了。附源程序:#include#include#include#includeinti,j,k,flag,number,status;/*statuswhichisusetojudgethestringiskeywordsornot!*/charch;charwords[10]={""};charprogram[500];intScan(charprogram[]){char*k
22、eywords[13]={"void","main","if","then","break","int","char","float","include","for","while","printf","scanf"};number=0;status=0;j=0;ch=program[i++];/*Tohandlethelettlespaceandstab*//*handleletters*/if((ch>='a')&&(ch<='z')){while((ch>='a')&&(ch<='z')){words[j++]=ch;ch=program[i++];}i--;words[j+
23、+]=' ';for(k=0;k<13;k++)if(strcmp(words,keywords[k])==0)switch(k){case0:{flag=1;status=1;break;}case1:{flag=2;status=1;break;}case2:{flag=3;status=1;break;}case3:{flag=4;status=1;break;}case4:{flag=5;status=1;break;}case5:{flag=6;status=1;break;}case6:{flag=7;status=1;break;}case7:{flag=8;sta
24、tus=1;break;}case8:{flag=9;status=1;break;}case9:{flag=10;status=1;break;}case10:{flag=11;status=1;break;}case11:{flag=12;status=1;break;}case12:{flag=13;status=1;break;}}if(status==0){flag=100;}}/*handledigits*/elseif((ch>='0')&&(ch<='9')){number=0;while((ch>='0')&&(ch<='9')){number=number*10
25、+(ch-'0');ch=program[i++];}flag=200;i--;}/*opereationandedgehandle*/elseswitch(ch){case'=':{if(ch=='=')words[j++]=ch;words[j]=' ';ch=program[i++];if(ch=='='){words[j++]=ch;words[j]=' ';flag=401;}else{i--;flag=402;}break;}case'>':{if(c
此文档下载收益归作者所有