词法分析_手工构造.doc

词法分析_手工构造.doc

ID:51389942

大小:118.00 KB

页数:8页

时间:2020-03-23

词法分析_手工构造.doc_第1页
词法分析_手工构造.doc_第2页
词法分析_手工构造.doc_第3页
词法分析_手工构造.doc_第4页
词法分析_手工构造.doc_第5页
资源描述:

《词法分析_手工构造.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、编译原理课程设计报告课题名称:词法分析手工构造一、实验目的通过编r并匕机调试一个词法分析程序,掌握编写简单•词法分析程序的-•般步骤,掌握在对程序设计语言的源程序进行扫描的过程中,将英分解后各类单词的词法分析方法,更好的巩固了编译原理的知识,加深了自己对编译原理的理解。二、实验设计设计思路:首先我们打开指定文件,从其中读取一个字符,再判断字符是否是字母,数字,再分别调用函数操作.如果是字母,先将这个字母放入一个数组里边去,再从文件中读取第二个字符并判断这个字符是不是字母,然后放入数组,直到读取的字符不是

2、字母为止,并赋一个结束符,再将数组的字符出与关键字匹配,如果匹配成功,就输出关键字,反之,则输出ID;如果是数字,存入数组,再读取F—个字符并判断他是否是数字,直到不是数字,在赋值结束符号,输出数字;如果输入的不是数字也不是字母,则判断他是标识符,如果第一标志符是〉,则看下一个字符,如果是二,则结束判定,输出>==,如果是英他的字符,则结束判定,输出〉:如果第一个标志符是〈,则看下一个字符,如果是二,则结束判定,输出〈二,如果是其他字符,则结束判定,输出〈:如果第…个字符为!,则看下一个字符,如果是则判

3、定结束,输出!=,如果是其他字符,就输出olhersymbol!o字符分类:关键字匹配:if、else^ini、while、return、void;单词种别码为1。算术运算符包括:+、-、*、/、=、、〈、二、<=、!=:单词种别码为2c.关系运算符包括:二、==>>、>=^<><=^!=;单词种别码为3o分隔符包括:,、;、{、}、(、):单词种别码为4。注释符包括:/*、*/;单词种别码为5.字母:letter[A~Za-z]数字:digit[0-9]TD:id{letter}+ID的DFA为:数:

4、num{digit}+三、程序代码#include#include#include#includeFILE*fp;intline;//所在行数char*key[6]={"else","if","in"return,,>"void","while"};//关键字char*typel[4]={〃+〃,〜〃,〃*〃,〃/〃};〃算术运算符char*type2[7]={Y",〃〈二〃,〃>",〃>二〃,〃=〃,〃!二〃,〃=〃};〃关

5、系运算符char*type3[8]={";〃,〃,〃,〃(〃,〃)〃,〃[〃,〃]〃,〃{〃,〃}〃};〃分界符号char*type4[2]二;//注释intCompare(charcstr[],intcstype);〃判断并输出数字charnumber(chars){inti=0;chardigit[500];while(isdigit(s)!=0){digit[i++]=s;s=fgetc(fp);}if(isalpha(s)!=0){while(isspace(s)==0){digit[i++]二

6、s;s=fgetc(fp);}printf(^linenum^d数字:%s,z,line,digit);returns;digit[i]=';printf(z,linenum=%d数字:%s",line,digit);returns;};//判断并输出关键字或字母charletter(chars){inti=0;charword[500];while(isalnum(s)!=0){word[i++]=s;s=fgetc(fp);}word[i]=,;if(Compare(word,1)=

7、=1){printf(z,linenum=%d关键字:%sXn^,line,word);}else{printf(,zlinenum=%d自定义变量:%sz,,line,word);}tetutns;};〃判断并输出各类标志符charother(chars){inti=0;charsymbol[1500];if(isspace(s)!=0){s二fgetc(fp);s;}while(isspace(s)==0&&isalnum(s)==0){if(s==>')symbol[i++]二s;s=fget

8、c(fp);if(s二二,二')symbol[i++]=s;s=fgetc(fp);}elsebreak;}//判断符号〉或符号>=elseif(s二二'){symbol[i++]=s;s=fgetc(fp);if(s==二'){symbol[i++]二s;s=fgetc(fp);}elsebreak;}//判断符号<或符号〈二elseif(s二二'二'){symbol[i++]=s;s=fgetc(fp);if(s==,二'){symbo

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

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

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