实验一词法分析程序实验
专业 商软2班 姓名 邝启彬 学号 201506110165
一、 实验目的
编制一个词法分析程序。
二、 实验内容和要求
输入:源程序字符串
输出:二元组(种别,单词符号本身)。
三、 实验方法、步骤及结果测试
- 1. 源程序名:词法分析.c
可执行程序名:词法分析.exe
- 2. 原理分析及流程图
- 3. 主要程序段及其解释:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *word[6]={"begin","if","then","while","do","end"};
char *word2[18]={"|","dd*","+","-","*","/",":",":=","<","<=","<>",">",">=","=",";","(",")","#"};
void words(char ch[]);
void signs(char ch[]);
main()
{
char ch[10];
do
{
printf("\n请输入保留字(输入##时结束):");
scanf("%s",ch);
if(ch==" "||ch=="\n")
getchar();
words(ch);
signs(ch);
}while(ch!="##");
}
void words(char ch[]) //输入的保留字是关键字
{
if(strcmp(ch,word[0])==0)
printf("%s,1",ch);
else if(strcmp(ch,word[1])==0)
printf("%s,2",ch);
else if(strcmp(ch,word[2])==0)
printf("%s,3",ch);
else if(strcmp(ch,word[3])==0)
printf("%s,4",ch);
else if(strcmp(ch,word[4])==0)
printf("%s,5",ch);
else if(strcmp(ch,word[5])==0)
printf("%s,6",ch);
}
void signs(char ch[]) //输入的保留字是标识符
{
int sum;
if(strcmp(ch,word2[0])==0)
printf("%s,10",ch);
if(strcmp(ch,word2[1])==0)
printf("%s,11",ch);
if(strcmp(ch,word2[2])==0)
printf("%s,13",ch);
if(strcmp(ch,word2[3])==0)
printf("%s,14",ch);
if(strcmp(ch,word2[4])==0)
printf("%s,15",ch);
if(strcmp(ch,word2[5])==0)
printf("%s,16",ch);
if(strcmp(ch,word2[6])==0)
printf("%s,17",ch);
if(strcmp(ch,word2[7])==0)
printf("%s,18",ch);
if(strcmp(ch,word2[8])==0)
printf("%s,20",ch);
if(strcmp(ch,word2[9])==0)
printf("%s,21",ch);
if(strcmp(ch,word2[10])==0)
printf("%s,22",ch);
if(strcmp(ch,word2[11])==0)
printf("%s,23",ch);
if(strcmp(ch,word2[12])==0)
printf("%s,24",ch);
if(strcmp(ch,word2[13])==0)
printf("%s,25",ch);
if(strcmp(ch,word2[14])==0)
printf("%s,26",ch);
if(strcmp(ch,word2[15])==0)
printf("%s,27",ch);
if(strcmp(ch,word2[16])==0)
printf("%s,28",ch);
if(strcmp(ch,word2[17])==0)
printf("%s,0",ch);
}
- 4. 运行结果及分析
四、 实验总结
通过这个实验,使我了解了编译器词法分析的过程。虽然在做这个程序的时候曾经没有思路,在编写的时候出现很多错误,但是我耐心的一一解决,终于完成这个程序,感觉比较满意。