实验一词法分析实验报告

Posted 115叶霆毅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验一词法分析实验报告相关的知识,希望对你有一定的参考价值。

一、        实验目的

(1)    理解词法分析在编译程序中的作用。

(2)    加深对有穷自动机模型的理解。

(3)    掌握词法分析程序的实现方法。

(4)    用C语言对一个简单语言的子集编制一个一遍扫锚的编译理解,掌握编译程序的实现方法和技术。

二、        实验内容和要求

1,待分析的简单语言的词法

2,各种单词符号对应的种别码。

3,词法分析程序的功能(输入,输出)。

三、        实验方法、步骤及结果测试

1.      源程序名:压缩包文件(rarzip)中源程序名: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 }
  1. 4.      运行结果及分析

一般必须配运行结果截图,结果是否符合预期及其分析。

  

四、实验总结

这次实验很有难度,一开始刚看到题目,毫无头绪,完全不知道是要干什么的,之后不断的上网查,问同学,开始理解题目,开始知道目的,在队友的帮助下,也开始知道怎么编写。在本次实验中我认识到程序不经常编译,水平只会降低。好多关于之前的知识也会逐渐忘掉。所以以后我会经常写程序,理解程序的内涵。经过多次检测,多次修改,多尝试各种方法,最终编写出来,虽然题目是做出来了,但是仍然存在很多漏洞,以后我会继续努力,学会从多角度思考!

 

以上是关于实验一词法分析实验报告的主要内容,如果未能解决你的问题,请参考以下文章

201506110135陈若倩词法分析实验报告

实验一 词法分析实验报告

词法分析实验报告

实验报告一:词法分析

实验一词法分析实验报告

实验报告一 词法分析程序