- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
需求说明北航本科编译原理大作业需求说明北航本科编译原理大作业
C0扩充文法编译器需求说明
学号:__________________
姓名:______罗杨______________
2010年 1月 16日
1 概述
本编译器通过识别符合扩充C0文法标准的输入,生成的32位X86汇编代码,经过MASM编译和连接后可以在Windows操作系统下直接运行。其中中间代码采用四元式的形式,并实现了局部公共子表达式删除,全局寄存器分配和数据流分析等基本优化。且本编译器具有UI 界面,可以显示错误信息,包含了MASM模块及其相关头文件和库。是一个简单而易用的扩充C0文法编译器。
2 文法
2.1原始文法
<加法运算符> ::= +|-
<乘法运算符> ::= *|/
<关系运算符> ::= |=||=|!=|==
<字母> ::= _|a|...|z|A|...|Z
<数字> ::= 0|<非零数字>
<非零数字> ::= 1|...|9
<字符> ::= ’加法运算符>|<乘法运算符>|<字母>|<数字>’
<字符串> ::= {合法字符}//字符串中可以出现所有合法的可打印字符集中的字符
<程序> ::= [<常量说明部分>][<变量说明部分>]{<有返回值函数定义部分>|<无返回值函数定义部分>}<主函数>
<常量说明部分> ::= const<常量定义>;{ <常量定义>;}
<常量定义> ::= int<标识符>=<整数>{,<标识符>=<整数>}| float<标识符>=<实数>{,<标识符>=<实数>}| char<标识符>=<字符>{,<标识符>=<字符>}
<整数> ::= [+|-]<非零数字>{<数字>}|0
<实数> ::= [+|-]整数[.整数]
<标识符> ::= <字母>{<字母>|<数字>}
<声明头部> ::= int<标识符> |float <标识符>|char<标识符>
<变量说明部分> ::= 变量定义;{变量定义;}
<变量定义> ::= <类型标识符><标识符>{,<标识符>}
<类型标识符> ::= int | float | char
<有返回值函数定义部分> ::= <声明头部>‘(’ <参数> ‘)’ ‘{’ <复合语句> ‘}’
<无返回值函数定义部分> ::= void标识符‘(’ 参数 ‘)’ ‘{’ 复合语句 ‘}’
<复合语句> ::= [<常量说明部分>][<变量说明部分>]<语句列>
<参数> ::= <参数表>
<参数表> ::= <类型标识符><标识符>{,<类型标识符><标识符>}| 空
<主函数> ::= void main ‘(’ ‘)’ ‘{’ <复合语句> ‘}’
<表达式> ::= [+|-]<项>{<加法运算符><项>}
<项> ::= <因子>{<乘法运算符><因子>}
<因子> ::= <标识符>|‘(’<表达式>‘)’|<整数>|<有返回值函数调用语句>|实数|<字符>
<语句> ::= <条件语句>|<循环语句>|‘{’语句列‘}’|<有返回值函数调用语句>; |<无返回值函数调用语句>;|<赋值语句>;|<读语句>;|<写语句>;|<空>|<返回语句>;
<赋值语句> ::= <标识符>=<表达式>
<条件语句> ::= if ‘(’<条件>‘)’<语句>[else<语句>]
<条件> ::= <表达式><关系运算符><表达式>|<表达式> //表达式为0条件为假,否则为真
<循环语句> ::= while ‘(’<条件>‘)’<语句>| for‘(’ <标识符>=<表达式>;条件;<标识符>=<标识符>(+|-)步长‘)’语句
<步长> ::= <非零数字>{<数字>}
<有返回值函数调用语句> ::= <标识符>‘(’<值参数表>‘)’
<无返回值函数调用语句> ::= <标识符>‘(’<值参数表>‘)’
<值参数表> ::= <表达式>{,<表达式>}|<空>
<语句列> ::= <语句>{<语句>}
<读语句> ::= scanf ‘(’<标识符>{,<标识符>}‘)’
<写语句> ::= printf ‘(’ 字符串,表达式 ‘)’|printf ‘(’ 字符串 ‘)’|printf ‘(’表达式‘)’
<返回语句> ::= return[‘(’<表达式>‘)’]
2.2 文法变更
根据编译器的实现过程、易用性、兼容性、正确性等客观情况,对原始文法进行了一些修改。
文字说明:
增加了注释的定义:包括多行注
您可能关注的文档
- 雅思词汇手册1019改.pdf
- 哈尔滨师范大学全日制教硕士考研难度分析哈尔滨师范大学全日制教育硕士考研难度分析.doc
- 哈尔滨师范大学2014博士研究生招生简章哈尔滨师范大学2014年博士研究生招生简章.doc
- 雅思考试两个单项满分的备考经验-智课教育出国考试.pdf
- 雅思考试守恒定律-智课教育出国考试.pdf
- 哈尔滨师范大学全日制教硕士考研相关问题答疑哈尔滨师范大学全日制教育硕士考研相关问题答疑.doc
- 雅思总分从55到65的飞跃-智课教育出国考试.pdf
- 雅思词汇不同国家的不同用法.pdf
- 哈希表在电信公用电话经分析中的应用哈希表在电信公用电话经营分析中的应用.doc
- 哈工大概率论与数理统计拟试题(二)哈工大概率论与数理统计模拟试题(二).doc
文档评论(0)