编译原理-设计c语言的词法分析器上课讲义.docx

编译原理-设计c语言的词法分析器上课讲义.docx

ID:57164371

大小:99.62 KB

页数:14页

时间:2020-08-05

编译原理-设计c语言的词法分析器上课讲义.docx_第1页
编译原理-设计c语言的词法分析器上课讲义.docx_第2页
编译原理-设计c语言的词法分析器上课讲义.docx_第3页
编译原理-设计c语言的词法分析器上课讲义.docx_第4页
编译原理-设计c语言的词法分析器上课讲义.docx_第5页
资源描述:

《编译原理-设计c语言的词法分析器上课讲义.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、编译原理-设计c语言的词法分析器编译原理课程设计报告题目:学院:教师:姓名:学号:班级:评分:签字:编译原理课程设计一:设计c语言的词法分析器一、实验目的了解高级语言单词的分类,了解状态图以及如何表示并识别单词规则,掌握状态图到识别程序的编程,加深对词法原理的理解。二、实验要求了解高级语言单词的分类,了解状态图以及如何表示并识别单词规则,掌握状态图到识别程序的编程。三、实验设计3.1.单词分类及表示3.1.1C语言的子集分类(1)标识符:以字母开头的字母数字串(2)整数或浮点型。(3)保留字:for,while,do,else,if,static,i

2、nt,sizeof,break,continue(4)运算符:+,-,*,/,%,>,<,=,!=,==,<=,>=,!,&,&&,

3、

4、;(5)界符:"(",")",",",":",";","{","}"3.1.2单词二元组(单词分类号、单词自身值)单词分类号标识符1整数或浮点型2保留字3运算符4界符53.2词法分析器的设计3.2.1算法设计3.2.1.1概要设计从文件中逐个读取字符,只要这五大类的状态序列则继续读取,否则回退字符,在对应类别进行查找,输出单元二次组至另一文件夹。3.2.1.2状态图设计3.2.2输入输出设计输入:通过文件指针从文件中

5、一个一个读取字符输出:输出单词二元组至文件。格式为(种别码,值)3.2.3主要函数voidGetchar(FILE*fp)//读入一个字符voidGetBC(FILE*fp)//读入一个非空字符voidcontacat()//连接字符intletter()//判断是否为字母intdigit()//判断是否为字母voidretract(FILE*fp,char*c)//回退intreserve(char**k)//处理保留字intsysmbol(identifier*id)//处理标识符,查找符号表并存放位置若没有则添加intconstant(cons

6、tnumber*con)//存入常数表,并返回它在常数表中的位置voidTofile(intnum,intval,identifier*id,constnumber*con,FILE*fw)//写到文件voidWordAnalyze(char**k,char*c,char**CODE,identifier*id,constnumber*con,FILE*fp,FILE*fw)//词法分析函数四、结果测试文件输入intmain(){inta=1,b=3;if(a>1)b=b-2;}输出结果:结论:程序输出结果与期望输出结果相符。四、收获与感想通过我本次

7、课程设计掌握了词法分析器设计的基本方法与相关知识。词法分析的关键是明确各类字符的状态转换过程。同时辅助标识符、常量结构体与保留字表用于查找返回值。同时我也对分析问题解决问题有了更深入全面的认识与理解。面对一个大的问题,需要理清解决的步骤再将其分解成小的模块逐个解决最后再串联在一起,问题就会变得更容易,思路也会更加清晰。五、实验代码#includeusingnamespacestd;#defineLENGTH10charch;char*CODE[]={"identifier","constant","keyword"/*保留字*/,

8、"+","-","*","/","<","<=",">",">=","!=","==","=","(",")",",",":",";","{","}"};char*k[]={"for","while","do","else","if","static","int","sizeof","break","continue"};//保留字chartoken[16];//存放处理后的字符串//标识符结构体typedefstruct{char*I[256];intlen;}identifier;typedefstruct{intcont[300];intlen

9、;}constnumber;//读入一个字符voidGetchar(FILE*fp){if((ch=getc(fp))==EOF)exit(1);}//读入一个非空字符voidGetBC(FILE*fp){while(ch==''

10、

11、ch==''

12、

13、ch==9)Getchar(fp);}//连接字符voidcontacat(){char*cht=&(ch);strcat_s(token,cht);}//判断是否为字母intletter(){returnisalpha(ch);}intdigit(){returnisdigit(ch);}//回退v

14、oidretract(FILE*fp,char*c){inta=ftell(fp);fseek(fp,0,S

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

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

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