资源预览内容
第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
第9页 / 共14页
第10页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
编译原理程序设计实验报告实验题目班级:计算机 1306 姓名: 学号:289实验目标:词法分析扫描器的设计实现实验内容:1. 概要设计1) 主函数:每次从文件中读取一个字符,不是#,继续判断其是否是 09 数字,是进入 isnumber()函数,否继续判断其是否是az 或 AZ,是进入 isalpha()函数,否继续判断是否是空格或换行符,是继续读下一个字符,否进入 isother()函数。2) Isnumber():读字符,将数字(包括小数点)全部接收,并存入常数表。3) Isalpha():读字符,将 az 或 AZ(包括下划线)全部接收,与关键字表比较,匹配,输出序号,否则存入标识符表。4) Isother():读字符,将符号都接受,与界符表比较,匹配输出序号,遇到”或分别存入字符表和字符串表。2. 流程图TFTFTFF3. 关键函数void IsNumber(); /读的是数字void IsAlpha(); /读的是关键字和标示符int IsOther();/读字符、字符串、界符从文件读一个字符09? 进入函数Isnumber()az 或 AZ? 进入函数isAlpha()#?空格或/n?进入isOther()结束开始源程序代码:(加入注释)#include#include#include #include using namespace std;/*定义结构体*/typedef struct Tokenchar name20;int state; /状态,为 0 是标识符,为 1 是字符,为 2 是字符串,为 3 是数字,为 4 是关键字,为 5 是界符 Token;typedef struct STR /char name20;int code;STR;STR iT10;STR cT20;STR sT20;STR CT20;STR KT10=int,4,main,5,void,6,if,7,else,8,char,9;STR PT30=,10,14,=0)&(ch=a)&(ch=A)&(ch=0)&(ch9)CurrentToken.namek+=ch;flag=0;elsewhile(ch=0)&(ch;elsecout=a)&(ch=A)&(chn,CurrentToken.name,KTi.code);strcpy(tokenindex.name,CurrentToken.name);tokenindex+.state =4;printf( ,KTi.code);break;if(flag!=1)while(ch=a)&(ch=A)&(ch=0)&(chn,CurrentToken.name);printf( );strcpy(tokenindex.name,CurrentToken.name);tokenindex+.state =0;int tag=0;for(int j=0;j: CurrentToken.name0=;flag=1;ch=fgetc(fp);if(ch =)CurrentToken.name1=;ch=fgetc(fp);break;elsebreak;case=a&ch=A&ch;strcpy(tokenindex.name,CurrentToken.name);tokenindex+.state =1;int tag=0; for(int j=0;j=a&ch=A&ch;strcpy(tokenindex.name,CurrentToken.name);tokenindex+.state =1;int tag=0;for(int j=0;jn,CurrentToken.name,PTi.code);printf( ,PTi.code);strcpy(tokenindex.name ,CurrentToken.name );tokenindex+.state =PTi.code;break;if(flag!=1)ch=fgetc(fp);/while(ch= |ch=n) ch=fgetc(fp);return 0;程序运行结果:(截屏)输入:Source.txt 文本int main (void)int a=1, d=2,c;if(a=d) c=a;a=d;d=c;char ch10=ok;char x,y=a;c=a+d;#输出:
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号