首页 > 代码库 > 实验一词法分析实验报告

实验一词法分析实验报告

一、        实验目的

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

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

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

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

二、        实验内容和要求

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

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

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

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

1.      源程序名:压缩包文件(rarzip)中源程序名:CIFENXI.c

可执行程序名:CIFAFEN.exe

 

  主要程序段及其解释:

# include<stdio.h>
# include<stdlib.h>
# include<string.h>

int panduan(char tmp[])
{
char b[6][10] = {"begin", "if", "then", "while", "do", "end", };
int k = 0;

while(k < 6) // 临时变量tmp 与 字符串b[k] 进行比较
{
if(strcmp(tmp, b[k]) == 0)
{
printf("<%s, %d>\n", tmp, k+1);
return 0;
}
k++;
}
printf("<%s, 10>\n", tmp);

return 0;
}

void cifafenxi(char a[])
{
int i = 0, j = 0;
char tmp[10];
int flag = 0;

while(a[i] != ‘\0‘)
{
if(a[i] >= ‘a‘ && a[i] <= ‘z‘) // 判断标识符
{
tmp[j] = a[i];
j++;
while((a[i+1] >= ‘a‘ && a[i+1] <= ‘z‘) || (a[i+1] >= ‘0‘ && a[i+1] <= ‘9‘))
{
i++;
tmp[j] = a[i];
j++;
}
tmp[j] = ‘\0‘;
j = panduan(tmp);
}

if(a[i] >= ‘0‘ && a[i] <= ‘9‘) // 判断数字
{
tmp[j] = a[i];
j++;
while(a[i+1] >= ‘0‘ && a[i+1] <= ‘9‘)
{
i++;
tmp[j] = a[i];
j++;
}
tmp[j] = ‘\0‘;
printf("<%s, 11>\n", tmp);
j = 0;
}

switch(a[i]) // 判断符号
{
case ‘+‘:printf("<+, 13>\n");break;
case ‘-‘:printf("<-, 14>\n");break;
case ‘*‘:printf("<*, 15>\n");break;
case ‘/‘:printf("</, 16>\n");break;
case ‘:‘:
{
if(a[i+1] == ‘=‘)
printf("<:=, 18>\n");
else
printf("<:, 17>\n");
}break;
case ‘<‘:
{
if(a[i+1] == ‘=‘)
printf("<<=, 21>\n");
else if(a[i+1] == ‘>‘)
printf("<<>, 22>\n");
else
printf("<<, 20>\n");
}break;
case ‘>‘:
{
if(a[i+1] == ‘=‘)
printf("<>=, 24>\n");
else
printf("<>, 23>\n");
}break;
case ‘=‘:printf("<=, 25>\n");break;
case ‘;‘:printf("<;, 26>\n");break;
case ‘(‘:printf("<(, 27>\n");break;
case ‘)‘:printf("<), 28>\n");break;
case ‘#‘:printf("<#, 0>\n");break;
}

i++;
}
}

int main(void)
{
char a[300];

printf("input : ");
gets(a);
cifafenxi(a);

return 0;
}

 

 

  1. 4.      运行结果及分析

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

 技术分享 

 

 

 

 

四、实验总结

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

 

实验一词法分析实验报告