实验一词法分析实验报告
Posted 115叶霆毅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验一词法分析实验报告相关的知识,希望对你有一定的参考价值。
一、 实验目的
(1) 理解词法分析在编译程序中的作用。
(2) 加深对有穷自动机模型的理解。
(3) 掌握词法分析程序的实现方法。
(4) 用C语言对一个简单语言的子集编制一个一遍扫锚的编译理解,掌握编译程序的实现方法和技术。
二、 实验内容和要求
1,待分析的简单语言的词法
2,各种单词符号对应的种别码。
3,词法分析程序的功能(输入,输出)。
三、 实验方法、步骤及结果测试
1. 源程序名:压缩包文件(rar或zip)中源程序名:CIFENXI.c
可执行程序名:CIFAFEN.exe
2.原理分析及流程图
主要程序段及其解释:
1 # include<stdio.h> 2 # include<stdlib.h> 3 # include<string.h> 4 5 int panduan(char tmp[]) 6 { 7 char b[6][10] = {"begin", "if", "then", "while", "do", "end", }; 8 int k = 0; 9 10 while(k < 6) // 临时变量tmp 与 字符串b[k] 进行比较 11 { 12 if(strcmp(tmp, b[k]) == 0) 13 { 14 printf("<%s, %d>\\n", tmp, k+1); 15 return 0; 16 } 17 k++; 18 } 19 printf("<%s, 10>\\n", tmp); 20 21 return 0; 22 } 23 24 void cifafenxi(char a[]) 25 { 26 int i = 0, j = 0; 27 char tmp[10]; 28 int flag = 0; 29 30 while(a[i] != \'\\0\') 31 { 32 if(a[i] >= \'a\' && a[i] <= \'z\') // 判断标识符 33 { 34 tmp[j] = a[i]; 35 j++; 36 while((a[i+1] >= \'a\' && a[i+1] <= \'z\') || (a[i+1] >= \'0\' && a[i+1] <= \'9\')) 37 { 38 i++; 39 tmp[j] = a[i]; 40 j++; 41 } 42 tmp[j] = \'\\0\'; 43 j = panduan(tmp); 44 } 45 46 if(a[i] >= \'0\' && a[i] <= \'9\') // 判断数字 47 { 48 tmp[j] = a[i]; 49 j++; 50 while(a[i+1] >= \'0\' && a[i+1] <= \'9\') 51 { 52 i++; 53 tmp[j] = a[i]; 54 j++; 55 } 56 tmp[j] = \'\\0\'; 57 printf("<%s, 11>\\n", tmp); 58 j = 0; 59 } 60 61 switch(a[i]) // 判断符号 62 { 63 case \'+\':printf("<+, 13>\\n");break; 64 case \'-\':printf("<-, 14>\\n");break; 65 case \'*\':printf("<*, 15>\\n");break; 66 case \'/\':printf("</, 16>\\n");break; 67 case \':\': 68 { 69 if(a[i+1] == \'=\') 70 printf("<:=, 18>\\n"); 71 else 72 printf("<:, 17>\\n"); 73 }break; 74 case \'<\': 75 { 76 if(a[i+1] == \'=\') 77 printf("<<=, 21>\\n"); 78 else if(a[i+1] == \'>\') 79 printf("<<>, 22>\\n"); 80 else 81 printf("<<, 20>\\n"); 82 }break; 83 case \'>\': 84 { 85 if(a[i+1] == \'=\') 86 printf("<>=, 24>\\n"); 87 else 88 printf("<>, 23>\\n"); 89 }break; 90 case \'=\':printf("<=, 25>\\n");break; 91 case \';\':printf("<;, 26>\\n");break; 92 case \'(\':printf("<(, 27>\\n");break; 93 case \')\':printf("<), 28>\\n");break; 94 case \'#\':printf("<#, 0>\\n");break; 95 } 96 97 i++; 98 } 99 } 100 101 int main(void) 102 { 103 char a[300]; 104 105 printf("input : "); 106 gets(a); 107 cifafenxi(a); 108 109 return 0; 110 }
- 4. 运行结果及分析
一般必须配运行结果截图,结果是否符合预期及其分析。
四、实验总结
这次实验很有难度,一开始刚看到题目,毫无头绪,完全不知道是要干什么的,之后不断的上网查,问同学,开始理解题目,开始知道目的,在队友的帮助下,也开始知道怎么编写。在本次实验中我认识到程序不经常编译,水平只会降低。好多关于之前的知识也会逐渐忘掉。所以以后我会经常写程序,理解程序的内涵。经过多次检测,多次修改,多尝试各种方法,最终编写出来,虽然题目是做出来了,但是仍然存在很多漏洞,以后我会继续努力,学会从多角度思考!
以上是关于实验一词法分析实验报告的主要内容,如果未能解决你的问题,请参考以下文章