编译原理实验报告(词法&语法分析).doc
《编译原理实验报告(词法&语法分析).doc》由会员分享,可在线阅读,更多相关《编译原理实验报告(词法&语法分析).doc(44页珍藏版)》请在沃文网上搜索。
1、课 程 实 验 报 告课程名称: 编译原理 专业班级: 学 号: 姓 名: 指导教师: 报告日期: word文档 可自由复制编辑目 录实验一 词法分析31 实验概述32 系统分析43 系统设计53.1词法分析DFA53.2系统流程图64 系统实现74.1 Head.h文件74.2 Main.c文件95 系统评价195.1关键字分析195.2标识符分析205.3常量分析205.4界符分析205.5运算符分析215.6其他字符分析215.7错误记录225.8完整词法分析输出22实验二 语法分析241 问题描述242 算法和数据结构设计243 C语言程序实现254 程序测试415 实验总结及心得体会
2、44实验一 词法分析1 实验概述此次实验要实现词法分析器,要求输入单词序列,输出是别的单词的二元组序列。选择计算机高级程序语言比如C语言,运用恰当的词法分析技术线路,设计和实现其对应的词法分析器。建议编程语言,选择计算机程序设计课程所采用的语言。要求分析器输出结果存入到磁盘文件中,具有出错处理功能。提示技术线路选择如下两种之一: 正则式NFADFAmin DFA程序设计或 正则文法NFADFAmin DFA程序设计2 系统分析拿到实验要求后,首先进行了背景分析。由于这次实验选择做C语言的词法分析,首先对C语言的单词分类进行了解。C语言单词分为标识符、关键字、常量(整型常量、浮点型常量)、运算符
3、、界符,另外还有一些其他字符。单词种类定义或内容标识符以字母或下划线打头的,字母、数字、下划线串关键字”include”,”auto”,”break”,”case”,”char”,”const”,”continue”,”default”,”do”,“double”,”else”,”enum”,”extern”,”float”,”for”,”goto”,”if”,”int”,”long”,“register”,”return”,”short”,”signed”,”sizeof”,”static”,”struct”,”switch”,“typedef”,”union”,”unsigned”,”vo
4、latile”,”while”,”main”,”void”,”int”,“char”,”printf”,”scanf”常量数字串(整型),或者两个数字串中间用小数点链接形成的串(浮点型)运算符+,-,*,/,=,=,=!&|;char sigopLENSIGOP = ;char otherLENOTHER = #.%;char word20,ch;int flag;int flag1;FILE *fp;FILE *out;FILE *fpkey;FILE *fpid;FILE *fpdigi;FILE *fpdel;FILE *fpop;FILE *fpother;FILE *fperr;in
5、t Deals1(char *word);int Deals2Int(char *word);int Deals2Float(char *word);int DealDel(ch);int DealOp(char *word);int DealErr(char ch);int DealErrString(char *word);int DealOther(char ch);int IsSigOp(char ch);int IsDblOp(char ch);int IsOp(char *word);int IsAlpha(char c);int IsNum(char c);int IsKey(c
6、har *word);int IsOther(char ch);int IsDel(char ch);4.2 Main.c文件#include #include #include #include #include head.h/*return 1 if c is alpha*/*else return 0*/int IsAlpha(char c) if(c = a) & (c = A) & (c = 0) & (c = 9) return 1; else return 0;/*return 2 if word is key*/*return 1 if word is id*/*else re
7、turn 0*/int IsKey(char *word) int m,i; for(i=0;iLENKEY-2;i+) if(strcmp(word, keyi) = 0) if(i = 0) return 2; return 1; return 0;/*return 1 if c is Del*/*else return 0*/int IsDel(char ch) int i; for(i=0;i=LENDEL;i+) if(ch = deli) return 1; return 0;/*return 1 if c is Other*/*else return 0*/int IsOther
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 实验 报告 词法 语法分析
