第一范文网 - 专业文章范例文档资料分享平台

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

来源:用户分享 时间:2025/5/18 19:08:41 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

桂林电子科技大学编译原理课程设计说明书 第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,其中词法分析状态转换图为:

编译原理课程设计说明书--词法分析,语法分析,语义分析.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c2wfea5nf4q7f2vd1ufx6_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top