1 / 12
文档名称:

《词法分析》实验报告书2.docx

格式:docx   大小:154KB   页数:12页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

《词法分析》实验报告书2.docx

上传人:63229029 2017/5/19 文件大小:154 KB

下载得到文件列表

《词法分析》实验报告书2.docx

相关文档

文档介绍

文档介绍:词法分析程序设计实验报告书一、实验目的(根据实际情况说明此实验目的)通过设计、开发一个高级语言的词法分析程序,理解编译程序中词法分析器的实现原理,掌握高级程序设计语言中的各类单词的词法分析方法,加深对词法分析原理(包括正规文法、正规表达式、有限自动机、 NFA 到DFA 的转换、 DFA 的最小化)的理解,提高词法分析方法的实践能力。二、实验原理 、词法分析器概要设计 、词法分析器详细设计 6.……五、部署和应用 codeblocks (可以截图) 3. 六、实验心得体会七、附件(源程序) #include<> #include<> #include<> #include<> // 定义关键字//char *Key[10]= {"main", "void", "int", "char", "printf", "scanf", "else", "if", "return"}; char Word[20],ch; // 存储识别出的单词流 int IsAlpha(char c) { // 判断是否为字母 if(((c<='z')&&(c>='a'))||((c<='Z')&&(c>='A'))) return 1; else return 0; } int IsNum(char c) { // 判断是否为数字 if(c>='0'&&c<='9') return 1; else return 0; } void scanner(FILE *fp) // 扫描函数{ char Word[20]= {'\0'}; char ch; int i,c; ch=fgetc(fp); // 获取字符,指针 fp 并自动指向下一个字符 if(IsAlpha(ch)) // 判断该字符是否是字母{ Word[0]=ch; ch=fgetc(fp); i=1; while(IsNum(ch)||IsAlpha(ch)) // 判断该字符是否是字母或数字{ Word[i]=ch; i++; ch=fgetc(fp); } Word[i]='\0'; //'\0' 代表字符结束( 空格) fseek(fp,-1,1); // 回退一个字符 printf("%s\t$38\n\n",Word);// 不是关键字} else // 开始判断的字符不是字母 if(IsNum(ch)) // 判断是否是数字{ Word[0]=ch; ch=fgetc(fp); i=1; while(IsNum(ch)) { Word[i]=ch; i++; ch=fgetc(fp); } Word[i]='\0'; fseek(fp,-1,1); // 回退 printf("%s\t$39\n\n",Word); } else // 开始判断的字符不是字母也不是数字{ Word[0]=ch; switch(ch) { case '(': printf("%s\t$50\n\n",Word); break; case ')': printf("%s\t$51\n\n",Word); break; case'+': printf("%s\t$28\n\n",Word); // 判断结果为“+” break; case'-': printf("%s\t$29\n\n",Word); // 判断结果为“-” break; case'*': ch=fgetc(fp); if(ch=='*') { Word[1]=ch; printf("%s\t$53\n\n",Word);// 运算符“**”} else { fseek(fp,-1,1); printf("%s\t$30\n\n",Word); // 判断结果为“*”} break; case'/': printf("%s\t$31\n\n",Word); break; //case'!': case'=': printf("%s\t$43\n\n",Word); break; default: printf(" 无法识别字符!\n\n"); break; }}} main() { char in_fn[30]; // 文件路径 FILE *fp; printf("\n 请输入源文件名(包括路径和后缀名) :"); while(1) { g