编译原理课程设计报告--C-语言编译器设计(scanner和parser)

编译原理课程设计报告--C-语言编译器设计(scanner和parser)

ID:35617855

大小:650.00 KB

页数:51页

时间:2019-04-02

编译原理课程设计报告--C-语言编译器设计(scanner和parser)_第1页
编译原理课程设计报告--C-语言编译器设计(scanner和parser)_第2页
编译原理课程设计报告--C-语言编译器设计(scanner和parser)_第3页
编译原理课程设计报告--C-语言编译器设计(scanner和parser)_第4页
编译原理课程设计报告--C-语言编译器设计(scanner和parser)_第5页
资源描述:

《编译原理课程设计报告--C-语言编译器设计(scanner和parser)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、编译原理课程设计报告课题名称:C-语言编译器设计(scanner和parser)提交文档学生姓名:提交文档学生学号:同组成员名单:无指导教师姓名:金军指导教师评阅成绩:指导教师评阅意见:..提交报告时间:2011年6月17日501.课程设计目标设计C-Minus编译器分为scanner和parser两个部分。scanner主要作用是对目标代码进行扫描,列出关键字,变量等内容;parser主要对语法进行分析并生成语法树。2.分析与设计l实现方法:代码用C语言编译而成。其中scanner为手工实现,主要采用switch-case结构实现状态转换;parser部分采用递归下降分析方法实现

2、。l扫描器:C-的词法如下:1、语言的关键字:ifelseintreturnvoidwhile2、专用符号:+-*/<<=>>===!==;,()[]{}/**/3、其他标记是变量(ID)和数字(NUM),通过下列正则表达式定义:ID=letterletter*NUM=digitdigit*letter=a

3、..

4、z

5、A

6、..

7、Zdigit=0

8、..

9、94、空格由空白、换行符和制表符组成。空格通常被忽略,除了它必须分开ID、NUM关键字5.注释用通常的C语言符号/*...*/围起来。注释可以放在任何空白出现的位置(即注释不能放在标记内)上,且可以超过一行。注释不能嵌套其DFA图如下

10、:50l分析器:以下为C-的语法规则BNF:50l代码设计说明:程序结构:本程序共有8个文件,分别为main.c,globals.h,scan.h,scan.c,util.h,util.c,parse.h,parse.c。其中main.c是主函数,实现打开文件等main函数的操作;globals.h里主要词法分析和语法分析的功能;util.c和util.h提供了词法分析和语法分析以及构造分析树的相关函数;scan.c和scan.h主要对目标程序进行扫描和词法分析;parse.c和parse.h主要实现语法分析。系统结构图如下:501.程序代码实现#include"globals.h

11、"//#defineNO_PARSEFALSE#include"util.h"//#ifNO_PARSE#include"scan.h"//#else#include"parse.h"//#endif/*allocateglobalvariables*/intlineno=0;FILE*source;FILE*listing;FILE*code;/*allocateandsettracingflags*/intEchoSource=TRUE;intTraceScan=TRUE;intTraceParse=TRUE;intError=FALSE;main(intargc,char*a

12、rgv[]){TreeNode*syntaxTree;charpgm[120];printf("请输入文件名(本文件夹下的文件,如a.txtb.txt):");scanf("%s",pgm);source=fopen(pgm,"r");if(source==NULL){fprintf(stderr,"File%snotfound",pgm);exit(1);}50listing=stdout;fprintf(listing,"CMINUSCOMPILATION:%s",pgm);syntaxTree=parse();if(TraceParse){fprintf(list

13、ing,"Syntaxtree:");printTree(syntaxTree);}fclose(source);return0;}#ifndef_GLOBALS_H_#define_GLOBALS_H_#include#include#include#include#ifndefFALSE#defineFALSE0#endif#ifndefTRUE#defineTRUE1#endif/*MAXRESERVED=thenumberofreservedwords*/#defineMAXRESERVED

14、6typedefenum/*book-keepingtokens*/{ENDFILE,ERROR,50/*reservedwords*/IF,ELSE,RETURN,WHILE,/*multicharactertokens*/ID,NUM,/*type*/INT,VOID,/*specialsymbols+-*/<<=>>===!==;,()[]{}*/PLUS,MINUS,TIMES,OVER,LT,LTEQ,GT,GTEQ,EQ,NOEQ,ASSIGN,SEMI,

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

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

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