词法分析试验报告

Posted

tags:

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

格式说明:排版时注意按此模板的字体,字号和行距。

报告提交和打印输出时请去掉此框。

 

实验一、词法分析实验

商业软件工程   曾颖鑫  学号 201506110229

一、        实验目的

     编写一个词法分析。

二、        实验内容和要求

    输入:源程序字符串

     输出:二元组(种别,单词本身)

各种单词符号对应的种别码:

单词符号

种别码

单词符号

种别码

bagin

1

:

17

If

2

:=

18

Then

3

20

while

4

<> 

21

do

5

<=

22

end

6

23

lettet(letteet|digit)

10

>=

24

digit digit*

11

=

25

+

13

;

26

-

14

(

27

*

15

)

28

/

16

#

0

 

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

1.      源程序名:词法分析.c

2.      主要程序段及其解释:

 

 #include<stdio.h>
#include<string.h>
char ch,token[8],prog[80];
int syn,p,m,n,sum;
char *rwtab[6]={"begin","if","then","while","do","end"};
void scaner();
main()
{
	p=0;
	printf("请输入一个字符串(输入#表示结束):");
	do{
		scanf("%c",&ch);
		prog[p++]=ch;
	}while(ch!=#);
	p=0;
	do{
		scaner();
		switch(syn)
		{
		case 11:printf("%-10d%5d\n",sum,syn);
			break;
		case -1:printf("输入的字符串有误!\n");
			getch();
			exit(0);
		default:printf("%-10s%5d\n",token,syn);
			break;
		}
	}while(syn!=0);
	getch();
}
void scaner()
{
	sum=0;
	for(m=0;m<8;m++)
		token[m++]=NULL;
	ch=prog[p++];
	m=0;
    while((ch==‘ ‘)||(ch==‘\n‘))
		ch=prog[p++];
	if(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘)))
	{
		while(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘))||((ch>=‘0‘)&&(ch<=‘9‘)))
		{
			token[m++]=ch;
			ch=prog[p++];
		}
		p--;
		syn=10;
		for(n=0;n<6;n++)
			if(strcmp(token,rwtab[n])==0)
			{
				syn=n+1;
				break;
			}
	}
	else if((ch>=‘0‘)&&(ch<=‘9‘))
	{
		while((ch>=‘0‘)&&(ch<=‘9‘))
		{
			sum=sum*10+ch-‘0‘;
			ch=prog[p++];
		}
		p--;
		syn=11;
	}
	else switch(ch)
	{
		case ‘<‘:token[m++]=ch;
			ch=prog[p++];
			if(ch==‘=‘)
			{
				syn=22;
				token[m++]=ch;
			}
			else
			{
				syn=20;
				p--;
			}
			break;
		case ‘>‘:token[m++]=ch;
			ch=prog[p++];
			if(ch==‘=‘)
			{
				syn=24;
				token[m++]=ch;
			}
			else
			{
				syn=23;
				p--;
			}
			break;
		case ‘+‘: token[m++]=ch;
			ch=prog[p++];
			if(ch==‘+‘)
			{
				syn=17;
				token[m++]=ch;
			}
			else
			{
				syn=13;
				p--;
			}
			break;
		case ‘-‘:token[m++]=ch;
			ch=prog[p++];
			if(ch==‘-‘)
			{
				syn=29;
				token[m++]=ch;
			}
			else
			{
				syn=14;
				p--;
			}
			break;
		case ‘!‘:ch=prog[p++];
			ch=prog[p++];
			if(ch==‘=‘)
			{
				syn=21;
				token[m++]=ch;
			}
			else
			{
				syn=31;
				p--;
			}
			break;
		case ‘=‘:token[m++]=ch;
			ch=prog[p++];
			if(ch==‘=‘)
			{
				syn=25;
				token[m++]=ch;
			}
			else
			{
				syn=18;
				p--;
			}
			break;
		case ‘*‘:syn=15;
		    token[m++]=ch;
		    break;
		case ‘/‘:syn=16;
		    token[m++]=ch;
		    break;
		case ‘(‘:syn=27;
		    token[m++]=ch; 
		    break;
		case ‘)‘:syn=28; 
		    token[m++]=ch;
		    break;
		case ‘{‘:syn=5;
		    token[m++]=ch; 
		    break;
		case ‘}‘:syn=6;
		    token[m++]=ch;
		    break;
		case ‘;‘:syn=26;
		    token[m++]=ch;
		    break;
		case ‘\"‘:syn=30;
		    token[m++]=ch;
		    break;
		case ‘#‘:syn=0;
		    token[m++]=ch;
		    break;
		case ‘:‘:syn=17;
		    token[m++]=ch;
		    break;
		default: syn=-1;
		    break;

	}
	token[m++]=‘\0‘;
}

3. 运行结果及分析

 

四、        实验总结

词法分析可以帮助自己更好地了解编译语言的编译工作原理,此次实验花了很多功夫才完成对编译器读取字符的工作有了一定了解。

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

试验1:词法分析

编译原理 实验一 java语言实现对C语言词法分析

编译原理 实验一 java语言实现对C语言词法分析

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

递归下降语法分析实验和词法分析实验报告,是编译原理的,做好直接发我邮箱 516786727@qq.com

词法分析实验报告