2022年需求说明北航本科编译原理大作业 .pdf

上传人:Q****o 文档编号:28065305 上传时间:2022-07-26 格式:PDF 页数:7 大小:97.39KB
返回 下载 相关 举报
2022年需求说明北航本科编译原理大作业 .pdf_第1页
第1页 / 共7页
2022年需求说明北航本科编译原理大作业 .pdf_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《2022年需求说明北航本科编译原理大作业 .pdf》由会员分享,可在线阅读,更多相关《2022年需求说明北航本科编译原理大作业 .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、C0扩充文法编译器需求说明学号: _37230118_ 姓名: _罗杨_ 2010 年1 月16 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - 1 概述本编译器通过识别符合扩充C0 文法标准的输入,生成的32 位 X86 汇编代码,经过MASM编译和连接后可以在Windows 操作系统下直接运行。其中中间代码采用四元式的形式,并实现了局部公共子表达式删除,全局寄存器分配和数据流分析等基本优化。且本编译器具有UI 界面,可以显

2、示错误信息,包含了MASM模块及其相关头文件和库。是一个简单而易用的扩充 C0 文法编译器。2 文法2.1 原始文法加法运算符:= 乘法运算符:= 关系运算符:= =!= = 字母:= a z A Z 数字:= 非零数字非零数字:= 字符:= 加法运算符乘法运算符字母数字字符串:= /字符串中可以出现所有合法的可打印字符集中的字符程序:= 常量说明部分 变量说明部分 有返回值函数定义部分|无返回值函数定义部分主函数常量说明部分:= const常量定义; 常量定义 ; 常量定义:= int标识符整数, 标识符整数| float标识符实数,标识符实数| char标识符字符,标识符字符 整数:= 非

3、零数字数字实数:= . 标识符:= 字母字母数字声明头部:= int 标识符|float 标识符 |char标识符变量说明部分:= ; 变量定义:= 类型标识符标识符,标识符 类型标识符:= int | float | char 有返回值函数定义部分:= 声明头部( 参数) 复合语句 无返回值函数定义部分:= void( ) 复合语句:= 常量说明部分 变量说明部分语句列参数:= 参数表参数表:= 类型标识符标识符 ,类型标识符标识符| 主函数:= void main ( ) 复合语句 表达式:= 项加法运算符项 项:= 因子 乘法运算符因子 因子:= 标识符(表达式)整数有返回值函数调用语句

4、 |字符语句:= 条件语句循环语句 有返回值函数调名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - 用语句 ; |无返回值函数调用语句;赋值语句;读语句;写语句;空返回语句;赋值语句:= 标识符表达式条件语句:= if (条件 )语句 else语句条件:= 表达式关系运算符表达式表达式/表达式为0 条件为假,否则为真循环语句:= while (条件)语句 | for( 标识符表达式; ;标识符标识符(+|-) 步长:= 非零数字数

5、字有返回值函数调用语句:= 标识符 (值参数表)无返回值函数调用语句:= 标识符 (值参数表)值参数表:= 表达式 ,表达式 空语句列:= 语句语句读语句:= scanf (标识符 ,标识符 )写语句:= printf ( , )|printf ( )|printf ()返回语句:= return(表达式) 2.2 文法变更根据编译器的实现过程、易用性、 兼容性、正确性等客观情况,对原始文法进行了一些修改。文字说明:(1)增加了注释的定义:包括多行注释/* */ 和单行注释 /。(2)根据杨海燕老师的说明,对的小数部分进行修改,使之可以产生全部合理小数。(3)根据杨海燕老师的说明,将可以推出

6、改为 可以推出;。(4)可以在函数或过程中多个位置设置Return 语句。2.3 实现文法加法运算符:= 乘法运算符:= 关系运算符:= =!= 字母:= a zA Z 数字:= 非零数字非零数字:= 字符:= 加法运算符乘法运算符字母数字字符串:= /字符串中可以出现所有合法的可打印字符集中的字符:= /* */:= / 程序:= 常量说明部分 变量说明部分 有返回值函数定义部分名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - -

7、|无返回值函数定义部分主函数常量说明部分:= const常量定义; 常量定义 ; 常量定义:= int标识符整数, 标识符整数| float标识符实数,标识符实数| char标识符字符,标识符字符 整数:= 非零数字数字实数:= . := 数字标识符:= 字母字母数字声明头部:= int 标识符|float 标识符 |char标识符变量说明部分:= ; 变量定义:= 类型标识符标识符,标识符 类型标识符:= int | float | char 有返回值函数定义部分:= 声明头部( 参数) 复合语句 无返回值函数定义部分:= void( ) 复合语句:= 常量说明部分 变量说明部分语句列参数:

8、= 参数表参数表:= 类型标识符标识符 ,类型标识符标识符| 主函数:= void main ( ) 复合语句 表达式:= 项加法运算符项 项:= 因子 乘法运算符因子 因子:= 标识符(表达式)整数有返回值函数调用语句 |字符语句:= 条件语句循环语句 有返回值函数调用语句; |无返回值函数调用语句;赋值语句;读语句;写语句;;返回语句;赋值语句:= 标识符表达式条件语句:= if (条件 )语句 else语句条件:= 表达式关系运算符表达式表达式/表达式为0 条件为假,否则为真循环语句:= while (条件)语句 | for( 标识符表达式; ;标识符标识符(+|-) 步长:= 非零数字

9、数字有返回值函数调用语句:= 标识符(值参数表)无返回值函数调用语句:= 标识符(值参数表)值参数表:= 表达式 ,表达式 空语句列:= 语句语句读语句:= scanf (标识符 ,标识符 )写语句:= printf ( , )|printf ( )|printf ()返回语句:= return (表达式) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - 2.3 属性翻译文法加法运算符AddOpr n := 乘法运算符MulOp

10、r n:= 关系运算符RelOpr n:= =!= 字母 Letter n:= a zA Z 数字 Number n /cs:= 非零数字非零数字PNumber n/ cs:= 字符 Chr cs:= 加法运算符乘法运算符字母数字字符串Str i:= insert /字符串中可以出现所有合法的可打印字符集中的字符:= /* */:= / 程序Program:= 常量说明部分 变量说明部分 有返回值函数定义部分 |无返回值函数定义部分主函数常量说明部分ConstDecl := const常量定义 ; 常量定义; 常量定义ConstDef:= intt 标识符n整数csinsert t ncs,

11、标识符整数 | float 标识符实数,标识符实数| char标识符字符, 标识符字符 整数 Integer cs:= 非零数字数字实数 Real cs:= . . := 数字标识符Id n:= 字母字母数字声明头部DeclHead t n := int标识符n |float 标识符n |char标识符n变量说明部分VarDecl:= ; 变量定义VarDef := 类型标识符t 标识符ninsertt nalloct ,标识符 ninsertt nalloct 类型标识符TypeId t:= int | float | char有返回值函数定义部分FuncDef := 声明头部t nbegi

12、n t ni( 参数 n) stepinnpopn 复合语句 end stepout 无返回值函数定义部分ProcDef := voidn beginni ( n ) stepinn popn end stepout 复合语句CompStat:= 常量说明部分 变量说明部分语句列参数 Para n:= 参数表n参数表 ParaTable n:= 类型标识符t 标识符 s insertnt s ,类型标识符t 标识符 s insertnt s | 主函数MainProc := void main begin () stepin 复合语句end stepout 表达式Expr i := s 项 i

13、1 加法运算符o项 i2add i1 i2oi3 sign in i项 Term i:= 因子 i1乘法运算符o因子 i2 mul i1 i2 oi3 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - 因子 Factor i := 标识符 n find ni (表达式i )整数cs consttemp csi 有返回值函数调用语句i |cs consttempcsi |字符 cs consttemp cs i语句 Stat:= 条

14、件语句循环语句check有返回值函数调用语句; |无返回值函数调用语句;赋值语句;读语句;写语句 ;;返回语句;赋值语句AssignStat:= 标识符n find ni1 表达式i2 assigni1 i2条件语句IfStat:= if (条件i ) ecbrf i a语句 labprodaelse cbrf b语句 labprodb条件LogExpr i:= 表达式i1 关系运算符o表达式i2rel i1i2 oi3 表达式i /表达式为0 条件为假,否则为真循环语句LoopStat:= while clabprod b (条件i) ecbrf i a语句 brfb labproda |

15、for( 标识符n find ni1 表达式i2 ;assigni1 i2 clabprodb i ;ecbrf i a标识符n1 find n1i1 标识符n2 find n2 i2 (+|-)istep add i1 istep oi2 )brfb labproda 步长 Step i:= 非零数字n数字nconsttemp ni有返回值函数调用语句FuncCall j := 标识符n find ni(值参数表i )calli j 无返回值函数调用语句ProcCall := 标识符 n find ni(值参数表i ) calli值参数表ArguTable i:= 表达式 i1 pushi

16、i1 m ,表达式i2push i i2 m 空语句列StatList:= 语句语句读语句 ReadStat:= scanf (标识符n find n i read i ,标识符 n find ni readi)写语句WriteStat:= printf ( i1 ,i2 write i1 i2 )|printf ( i1 writei1)|printf ( i2 writei2 )返回语句RetStat:= return (表达式i ret i) ret 3 中间代码优化3.1 原始要求根据要求,在中间代码层需要进行以下几种优化:(1)基本块内的公共子表达式删除(2)全局寄存器分配(3)数据

17、流分析、活跃变量分析名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - 3.2 实现的优化根据实际的程序结构和项目规模,对中间代码优化部分实现以下功能:(1)数据流分析(为后面目的)(2)基本块内的公共子表达式删除(3)常量数值替换(不含传递消除)(4)全局寄存器分配(5)无用代码消除(6)栈空间压缩4 目标代码生成4.1 要求目标码: x86 汇编,4.3 实现考虑到 Windows 平台下各种指令集的功能及适用范围,选择Inte

18、l 386 指令集作为汇编输出格式。用MASM611 或 MASM32 工具可以实现编译和连接。5 用户界面最后的发布形式应该包含如下几部分:编译器程序:包括图形界面(输入文件选择、输出文件选择、编译结果显示等)。外部工具链:相应的汇编器、连接器以及脚本(批处理)。6 开发环境开发语言: C+ 开发平台: Visual C+ 6.0 汇编工具:Windows 系统: Masm32v10 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁