资源描述:
《c_minus语言词法分析器的设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验一:词法分析程序的设计与实现姓名:专业班级:学号:一、实验目的设计一个简单的词法分析器,从而进一步加深对词法分析器工作原理的理解。二.、实验内容编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。三、实验要求根据PL/0语言文法,编制词法分析程序GETSYM完成以下功能:1)从键盘读入数据,分析出一个单词。2)返回单词种别(用整数表示),3)返回单词属性(不同的属性可以放在不同的全局变量中)。四.、实验步骤1. 采用C语言,设计GETSYM,实现该算法2. 编制测试程序(主函数main)。3. 调试程序:输入一组单词,检
2、查输出结果。五.、实验设计分析1.词法的正规式描述S=aA
3、aA=(aA
4、dA)}(a
5、d)2.变换后的正规文法S→aAS→aA→aAA→dAA→aA→d3.词法分析程序的程序代码#include"stdafx.h"#include#includeusingnamespacestd;#defineMAX17charch='';stringkey[17]={"const","long","float","double","void","main","if","else","then","break","int"
6、,"char","include","for","while","printf","scanf"};intIskey(stringc){//关键字判断inti;for(i=0;i='a'))
7、
8、((c<='Z')&&(c>='A')))return1;elsereturn0;}intIsLetter1(charc){//判断是否为a~f字母if(((c<
9、='f')&&(c>='a'))
10、
11、((c<='F')&&(c>='A')))return1;elsereturn0;}intIsDigit(charc){//判断是否为数字if(c>='0'&&c<='9')return1;elsereturn0;}voidscan(FILE*fpin){stringarr="";while((ch=fgetc(fpin))!=EOF){arr="";if(ch==''
12、
13、ch=='t'
14、
15、ch==''){}elseif(IsLetter(ch)
16、
17、ch=='_'){arr=arr+ch;ch=fget
18、c(fpin);while(IsLetter(ch)
19、
20、IsDigit(ch)){if((ch<='Z')&&(ch>='A'))ch=ch+32;arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);if(Iskey(arr)){cout<='
21、0'&&ch<='7'){while(ch>='0'&&ch<='7'){flag=1;arr=arr+ch;ch=fgetc(fpin);}}elseif(ch=='x'
22、
23、ch=='X'){flag=2;arr=arr+ch;ch=fgetc(fpin);while(IsDigit(ch)
24、
25、IsLetter1(ch)){arr=arr+ch;ch=fgetc(fpin);}}elseif(ch==''
26、
27、ch==','
28、
29、ch==';'){cout<30、;if(flag==1)cout<31、':case'/
32、':cout<