c-minus词法分析和语法分析设计编译器编译原理课程设计

c-minus词法分析和语法分析设计编译器编译原理课程设计

ID:842253

大小:656.52 KB

页数:55页

时间:2017-09-18

c-minus词法分析和语法分析设计编译器编译原理课程设计_第1页
c-minus词法分析和语法分析设计编译器编译原理课程设计_第2页
c-minus词法分析和语法分析设计编译器编译原理课程设计_第3页
c-minus词法分析和语法分析设计编译器编译原理课程设计_第4页
c-minus词法分析和语法分析设计编译器编译原理课程设计_第5页
资源描述:

《c-minus词法分析和语法分析设计编译器编译原理课程设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、编译原理课程设计报告课题名称:C-Minus词法分析和语法分析设计提交文档学生姓名:XXX提交文档学生学号:XXXXXXXXXX同组成员名单:XXX指导教师姓名:XX指导教师评阅成绩:指导教师评阅意见:..提交报告时间:2015年6月10日1.课程设计目标实验建立C-编译器。只含有扫描程序(scanner)和语法分析(parser)部分。2.分析与设计C-编译器设计的整体框架,本实验实现扫描处理和语法分析程序(图中粗黑部分)。2.1、扫描程序scanner部分2.1.1系统设计思想设计思想:根据DFA图用switch-case结构实现状态转换。惯用词法:① 语言的关键字:els

2、eifintreturnvoidwhile② 专用符号:+-*/<<=>>===!==;,()[]{}/**/③ 其他标记是ID和NUM,通过下列正则表达式定义:ID=letterletter*NUM=digitdigit*letter=a

3、..

4、z

5、A

6、..

7、Zdigit=0

8、..

9、9大写和小写字母是有区别的④ 空格由空白、换行符和制表符组成。空格通常被忽略,除了它必须分开ID、NUM关键字。⑤ 注释用通常的C语言符号/*...*/围起来。注释可以放在任何空白出现的位置(即注释不能放在标记内)上,且可以超过一行。注释不能嵌套说明:当输入的字符使DFA到达接受状态的时候,则可以

10、确定一个单词了。初始状态设置为START,当需要得到下一个token时,取得次token的第一个字符,并且按照DFA与对此字符的类型分析,转换状态。重复此步骤,直到DONE为止,输出token类型。当字符为“/”时,状态转换为SLAH再判断下一个字符,如果为“*”则继续转到INCOMMENT,最后以“*”时转到ENDCOMMENT状态,表明是注释,如果其他的则是字符停滞于当前字符,并且输出“/”。2.1.2程序流程图2.1.3各文件或函数的设计说明扫描程序用到:scanner.h,scanner.cppØscanner.h:声明词法状态,词法分析//DFA中的状态typedef

11、enum{START=1,INNUM,INID,INDBSYM,DONE}DFAState;//定义的Token的类型(31种),分别对应于else、if、int、return、void、while、+、-、*、/、<、<=、>、>=、==、!=、=、;、,、(、)、[、]、{、}、/*、*/、num、id、错误、结束typedefenum{ELSE=1,IF,INT,RETURN,VOID,WHILE,PLUS,MINUS,TIMES,OVER,LT,LEQ,GT,GEQ,EQ,NEQ,ASSIGN,SEMI,COMMA,LPAREN,RPAREN,LMBRACKET,RMB

12、RACKET,LBBRACKET,RBBRACKET,LCOMMENT,RCOMMENT,NUM,ID,ERROR,ENDFILE}TokenType;//定义的Token结构体,包括类型、对应的串、所在代码的行号structToken{TokenTypetokenType;stringtokenString;intlineNo;};//每种TokenType对应的串,如tokenTypeString[ELSE]=="ELSE"conststringtokenTypeString[32]={"OTHER","ELSE","IF","INT","RETURN","VOID","W

13、HILE","PLUS","MINUS","TIMES","OVER","LT","LEQ","GT","GEQ","EQ","NEQ","ASSIGN","SEMI","COMMA","LPAREN","RPAREN","LMBRACKET","RMBRACKET","LBBRACKET","RBBRACKET","LCOMMENT","RCOMMENT","NUM","ID","ERROR","ENDFILE"};classScanner:定义scanner.cpp中函数Øscanner.cpp文件函数说明voidScanner::scan():设置输出结果界面以及设置各种

14、输出状态。if(scanSuccess==false)cout<<"词法分析出错!"<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。