编译原理实验二:词法分析程序

您所在的位置:网站首页 编写词法分析程序的讨论与分析 编译原理实验二:词法分析程序

编译原理实验二:词法分析程序

2024-07-06 03:38| 来源: 网络整理| 查看: 265

实验目的

学习和掌握词法分析程序手工构造状态图及其代码实现方法。

 

实验任务 阅读已有编译器的经典词法分析源程序;用C或C++语言编写一门语言的词法分析器。

 

实验内容 阅读已有编译器的经典词法分析源程序。

选择一个编译器,如:TINY,其它编译器也可(需自备源代码)。阅读词法分析源程序,理解词法分析程序的手工构造方法——状态图代码化。尤其要求对相关函数与重要变量的作用与功能进行稍微详细的描述。若能加上学习心得则更好。TINY语言请参考《编译原理及实践》第2.5节(见压缩包里附带的文档)。

确定今后其他实验中要设计编译器的语言,如TINY语言,又如更复杂的C-语言(其定义在《编译原理及实践》附录A中)。也可选择其它语言,不过要有该语言的详细定义(可仿照C-语言)。一旦选定,不能更改,因为要在以后继续实现编译器的其它部分。鼓励自己定义一门语言。根据该语言的关键词和识别的词法单元以及注释等,确定关键字表,画出所有词法单元和注释对应的DFA图。仿照前面学习的词法分析器,编写选定语言的词法分析器。准备2~3个测试用例,要求包含正例和反例,测试编译结果。

 

提示

在充分理解状态转换图代码化思想的基础上,思考不同的程序设计语言从词法角度有什么区别,可利用增量编程的思想提高编程效率。实验通过测试后,按规定时间上交源代码、测试样例、输出文件(如有输出文件)和电子版实验报告。

 

状态转换图

  代码实现 #include #include #include #include using namespace std; int LINE=1; //用于记录代码的行数 bool flag=false; //用于表示当前注释是否结束 typedef enum { ENDFILE,ERROR, //文件读取完毕和错误 IF,ELSE,INT,RETURN,VOID,WHILE, //六关键字 ID,NUM, //数字和字母 ADD,SUB,MUL,DIV,L,LE,G,GE,ISE,NT,NTE,FZ,FH,DH,LXK,RXK,LZK,RZK,LDK,RDK,LZS,RZS // + - * / < >= == != = ; , ( ) [ ] { } /* */ }TokenType; typedef enum { START,INNUM,INID,INLT,INGT,INEQ,INNOT,INCOMMENT,INDELETE,READDELETE,DONE //开始、数字、字符、小于等于、大于等于、赋值或等于、注释开始,注释内容开始,注释内容结束,完成和单个字符直接完成 }TokenState; bool isnum(char a) //检测当前字符是否为数字 { if(a>='0'&&a='a'&&a='A'&&a


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3