logo资料库

编译原理实验报告(含代码:状态转换图;DFA扫描;First集,follow集计算).doc

第1页 / 共21页
第2页 / 共21页
第3页 / 共21页
第4页 / 共21页
第5页 / 共21页
第6页 / 共21页
第7页 / 共21页
第8页 / 共21页
资料共21页,剩余部分请下载后查看
一.实验目的
二.实验内容
三.实验要求
四.程序运行截图
五.关键程序清单
六.心得体会
七.参考文献
**大学 编译原理实验报告 报 告 学生姓名 *** 学 号 *** 专业班级 *** 指导教师 *** 院 **** 学 完成时间 *年*月 1
目录 一.实验目的.......................................... 3 二. 实验内容........................................ 3 三. 实验要求........................................ 3 四. 程序运行截图................................ 4 五.关键程序清单.................................. 7 六.心得体会........................................ 21 七.参考文献........................................ 21 2
一.实验目的 通过实验教学,加深学生对所学的关于编译的理论知识的理解,增强学生对所学知识的 综合应用能力,并通过实践达到对所学的知识进行验证。通过实验,使学生掌握词法分析的 实现技术,深入了解语法分析的实现技术及具体实现方法。将《编译原理》的相关理论运用 到软件开发中,提高学生的应用程序设计能力,提高分析问题、解决问题的能力。锻炼学生 的编程能力和逻辑思维能力,体会计算机编译器的奥妙之处。 二.实验内容 1.状态转换图 2.DFA 扫描 3.First 集,follow 集计算 三.实验要求 实验一:状态转换图 输入一串数据,利用状态转换图程序求出“关键字,标识符,整数,运算符,实数”。 实验二:DFA 扫描 打开一个编写好的源代码,利用 DFA 扫描程序删除多行注释,单行注释,多余的行, 多余的空格。 实验三:first 集,follow 集计算 输入一个不含左递归的文法,由此程序求出该文法的 first 集和 follow 集。 3
四.程序运行截图 实验一:状态转换图: 得到“关键字,标识符,整数,运算符,实数” 实验二:DFA 扫描 (1)打开源代码 1.txt,删除了注释及多余的空格 4
(2)源代码里存在注释错误 (3)硬盘里不存在 2.txt 文件,提示错误 实验三:first 集,follow 集计算 5
(1)输入一个不含左递归的文法,得到 first 集和 follow 集 (2)输入的文法含有左递归,提示输入文法错误 6
五.关键程序清单 实验一:状态转换图 #include #include #include iskeyword(sd) { if(strcmp(sd,"auto")==0||strcmp(sd,"break")==0||strcmp(sd,"case")==0||strcm p(sd,"char")==0||strcmp(sd,"if")==0||strcmp(sd,"else")==0||strcmp(sd,"while")== 0) return 1; else return 0; } /*关键字列表*/ iscalcu(sd) { if(sd=='+'||sd=='-'||sd=='*'||sd=='/') return 1; else return 0; } /*运算符列表*/ void main() { char strs[254],sd[254]; int st,sw,i; clrscr(); printf("Please input the string:\n");/*输入一个字符串*/ scanf("%s",strs); st=0; sw=strlen(strs); while(st
printf("The keyword is %s\n",sd);/*输入字符串在关键字列表中*/ else { while(strs[st]!='\0'&&(isdigit(strs[st])||isalpha(strs[st]))) sd[i++]=strs[st++]; sd[i]='\0'; printf("The remank is %s\n",sd); /*不在关键字列表中的为标识符*/ } } /*实数算法*/ else if(isdigit(strs[st])) { i=0; do sd[i++]=strs[st++]; while(isdigit(strs[st])&&(st
分享到:
收藏