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

编译原理课设

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

课 程 实 验 报 告

课程名称: 编

译 原 理

C语言汇编器的实现

专业班级: 学 号: 姓 名: 指导教师: 报告日期:

计算机科学与技术学院

一 实验内容

实现一个C语言的编译器。

二 概述

编译器可划分为词法分析器,语法分析器,语义分析器,四元组生成以及汇编代码生成。

本编译器除了实现上述几个基本模块外还实现了四元组的优化,汇编代码的优化和头文件的包含,由于时间缘故并没有对宏进行进一步的实现。 编译器支持的数据类型为:int, char, float(理论上对于所有数据类型均可识别,但不支持翻译)。 编译器支持的语法结构为:赋值语句(不支持”(“和”)”运算),do-while循环语句,if-else条件语句(if和else后面的语句块必须符合语法标准及被”{“和”}”包含),不支持函数调用。 四元组优化为:重复子元组的优化,如(+,a,c,b)……(+,a,c,d),若这两个四元组之间a和c的值没有发生改变,那么后一个四元组会被优化为(=,b,-,d)。 汇编代码的优化详细见后文。 (代码在答辩后对于老师的建议做了一定的修正,包括文件名输入,四元组的修正,以及新加入的汇编代码的优化) 使用说明:

1. 首先输入待编译文件名,然后选择是否需要优化汇编代码。若编译正确,则会产生

两个新的文件.o文件和.asm文件,分别对应待编译文件的中间代码和目标代码。 2. 本编译器仅支持全局变量 3. 本编译器不支持函数

4. If-else以及do-while后面的语句块必须符合定义的语法标准,即被“{”和“}”包

含。

三 实验方案

1. 词法分析器

C语言中有6中词法元素:标识符(identifiers),关键字(keywords),常量(constants),字符串文字(string literals),空白字符(white space)(包括注释)。而实际上还存在一些其他非空白符(如?{?、?}?、?;?)。因此稍作整合和简化,就有标识符,关键字,常量(包括整形常量,浮点常量,字符常量),字符串文字,操作符,其他非空白符六种,分别编号为1~6。在计数时,将sizeof归入关键字,以免重复计数。

1) 单词符号及种别表: 单词符号 变量 种别编码 1 2 2 2 2 2 2 2 2 2 标号 1 2 3 4 5 6 7 8 9 10 main int float double char if else do while 常量 字符串 = + - * / ( ) > >= < <= == != , { } ;

2) 算法的流程图

3 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 开始 读入字符串S S为空? Y N 提取关键字token 结束 识别token词法属性 输出关键字token及其词法属性 可以看出,提取token和识别token便成为了本次实验的重难点。 3) 文法

首先以字符串方式读入程序,假定所有读入的字符串间都由间隔符分开,这用C语言的标准输入scanf便可以轻松实现。对于每一个字符串,根据经验假定是文法G[S]的句子。

其中G[S]为:

**S?N10PN10EN10GAPS (10进制整形常量)

**S?0N8PN8EN8GAPS(8进制常量) **S?0SXN16PN16EN16GAPS (16进制常量)

S?'ANY'GAPS (字符常量) S?\ANY\GAPS (字符串) S?OPANYGAPS (操作符)

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