编译原理课程设计说明书--词法分析,语法分析,语义分析

发布时间 : 星期五 文章编译原理课程设计说明书--词法分析,语法分析,语义分析更新完毕开始阅读

桂林电子科技大学编译原理课程设计说明书 第3页

1.3 小组分工

2 开发过程

2.1 词法分析

2.1.1 消除白空格以及注释

这个模块实现的功能主要是对代码中多余的白空格以及注释进行消除。在文本中输入一段代码,其中可以有多余的空格和注释,经过这个程序运行后,将实现多余空格,注释去除。

设计思路:

这个模块一共有6个状态,设为0,1,2,3,4,5,其中状态转换图:

桂林电子科技大学编译原理课程设计说明书 第4页

桂林电子科技大学编译原理课程设计说明书 第5页

字符转换表Ch_Type_Table: ASIC 非白’非’/’非’*’非’\\r’ 4 白’ 3 / 13 * 10 \\r,\\n 0 1 2 3 4 说明:白’表示空格、TAB(\\t);而 白是等于 白’+\\r,\\n,把\\r,\\n独立出来是为了消除注释需要。

状态转换表state_Trans_Table: 符号 0 0 0 0 3 4 4 1 1 1 0 3 4 4 2 2 2 3 3 4 1 3 0 0 4 3 5 4 4 S_B 0 1 2 3 4 5

Action_Table: S_A S_B 0 1 2 3 4 5 S1 1 0 1 4 4 0 f_留 f_留 f_补 / / / 1 f_改 f_删 / f_改 / f_改 2 f_删 f_删 / / / / 3 / / f_删 f_删 / / 4 / / f_删 / f_删 f_删 5 / / / / f_删 / 其中在程序中f_留表示为f_save;f_改表示为f_change;f_补表示为f_add;f_删表示为f_delete;Action_Table表示为void(*Action_Table[6][6])(void)。

桂林电子科技大学编译原理课程设计说明书 第6页

2.1.2 词法分析

设计思路:

1、把消除白空格、消除注释、识别标识符id,识别整数di,识别运算符、识别界符、识别双引号内的注释分层次画状态机,使状态机清晰易懂,方便其他同学学习;

2、以0状态为中转,每一层次的状态机遇到不是该层次的内容(识别了一个词元,当前输入不是该词元的内容了),回到0状态去判断该字符应转向的状态。

3、使用了ungetc()函数,输入回退一个字符,回到0状态中转之前,如果该字符并没有做处理,要ungetc,回退到输入流,那么从0状态会再读出之前没有处理的字符,再判断转换;

4、词元存储,用结构体存储数组存储;不同类型的词元对应不同的表,词元结构体中存储的是,该词元的类型(也即表的类型)、在该表中的下标(可以通过该下标找到对应词元的相关信息,便于后期扩展)、该词元在测试代码中的坐标(x,y)。不同类型的词元表有程序动态维护。表的动态维护对与整个编译程序很重要。

struct Data{ int type; //表类型:id=0,num=1,运算符 2 界符 3 int value; //在表中的下标 int pos_x,pos_y;//源代码位置 };

本模块一共有13个状态,0—12,其中词法分析状态转换图为:

联系合同范文客服:xxxxx#qq.com(#替换为@)