首页 > 代码库 > 实验报告一 词法分析程序
实验报告一 词法分析程序
实验一、词法分析程序实验
专业 计算机科学与技术 姓名 谢建航 学号 201506110209
一、 实验目的
1.编制一个词法分析程序。
二、 实验内容和要求
- 输入:源程序字符串
- 输出:二元组,用小括号括起
- 待分析语言的词法规则
三、 实验方法、步骤及结果测试
- 1. 源程序名:压缩包文件(rar或zip)中源程序名简易词法分析.c
可执行程序名:简易词法分析.exe
- 2. 原理分析及流程图
- 3. 主要程序段及其解释:
#include<stdio.h>
#include<string.h>
int ysf(char a[100],int i)
{
switch(a[i])
{
case ‘+‘:
{
printf("(13,+)");
printf("\n");
return(1);
}
case ‘-‘:
{
printf("(14,-)");
printf("\n");
return(1);
}
case ‘*‘:
{
printf("(15,*)");
printf("\n");
return(1);
}
case ‘/‘:
{
printf("(16,/)");
printf("\n");
return(1);
}
case ‘:‘:
{
if(a[i+1]==‘=‘)
{
printf("(18,:=)");
printf("\n");
return(2);
}
else
printf("(17,:)");
printf("\n");
return(1);
}
case ‘<‘:
{
if(a[i+1]==‘>‘)
{
printf("(21,<>)");
printf("\n");
return(2);
}
else if(a[i+1]==‘=‘)
{
printf("(22,<=)");
printf("\n");
return(2);
}
else
printf("(20,<)");
printf("\n");
return(1);
}
case ‘>‘:
{
if(a[i+1]==‘=‘)
{
printf("(24,>=)");
printf("\n");
return(2);
}
else
printf("(23,>)");
printf("\n");
return(1);
}
case ‘=‘:
{
printf("(25,=)");
printf("\n");
return(1);
}
case ‘;‘:
{
printf("(26,;)");
printf("\n");
return(1);
}
case ‘(‘:
{
printf("(27,()");
printf("\n");
return(1);
}
case ‘)‘:
{
printf("(28,))");
printf("\n");
return(1);
}
default:
return(0);
break;
}
printf("\n");
}
void number(char a[10])
{
int i=0;
char text[10];
while(a[i]!=‘\0‘)
{
text[i]=a[i];
i++;
}
text[i]=‘\0‘;
printf("(11,%s)\n",text);
}
void fing(char a[10])
{
int i=0;
char text[10];
while(a[i]!=‘\0‘)
{
text[i]=a[i];
i++;
}
text[i]=‘\0‘;
if( strcmp(text,"begin")==0)
{
printf("(1,begin)");
}
else if( strcmp(text,"if")==0)
{
printf("(2,if)");
}
else if( strcmp(text,"then")==0)
{
printf("(3,then)");
}
else if( strcmp(text,"while")==0)
{
printf("(4,while)");
}
else if( strcmp(text,"do")==0)
{
printf("(5,do)");
}
else if( strcmp(text,"end")==0)
{
printf("(6,end)");
}
else
{
printf("(10,%s)",text);
}
printf("\n");
}
main(){
int i=0,j=-1,l=0,x=0;
char a[100],text[10];
printf("输入源程序,以#号结束:");
gets(a);
while(1)
{
if(a[i]>=‘0‘&&a[i]<=‘9‘)
{
while(a[i]>=‘0‘&&a[i]<=‘9‘)
i++;
l=0;
for(++j;j<i;j++)
{
text[l]=a[j];
l++;
}
text[l]=‘\0‘;
number(text);
i--;
}
else if(a[i]>=‘a‘&&a[i]<=‘z‘||a[i]>=‘A‘&&a[i]<=‘Z‘)
{
l=0;
for(i;a[i]>=‘a‘ && a[i]<=‘z‘ ||a[i]>=‘A‘&&a[i]<=‘Z‘;i++)
{
text[l]=a[i];
l++;
}
i--;
text[l]=‘\0‘;
fing (text);
}
else
{
if(a[i]==‘#‘)
{
printf("(0,#)");
break;
}
x=ysf(a,i);
if(x==1)
{
j=i;
}
else if(x==2)
{
i++;
j=i;
}
}
i++;
}
}
- 4. 运行结果及分析
四、 实验总结
一开始不知道怎么处理字符串,后来用先用字符数组对输入进行保存,再用另一个字符数字进行一一记录,标记为字符串。
根据数组记录的字符串类型调用函数,再进行一一输出。
做这个软件算是复习了大一所学的c语言知识吧。
实验报告一 词法分析程序