实验一、 词法分析程序实验
专业 计算机科学与技术 姓名 王晓峰 学号 201506110163
一、 实验目的
编制一个词法分析程序。
二、 实验内容和要求
—输入:源程序字符串。
—输出:二元组(种别,单词本身)
—待分析语言的词法规则
主要是从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用于语法分析
三、 实验方法、步骤及结果测试
- 1. 源程序名:压缩包文件词法分析.rar中源程序名词法分析.c
- 2. 原理分析
这里的存储结构主要是用数组来存储字符串。
这里的算法主要是while语句的循环,首先先在主函数中检测是否有$这个终结条件,如果是的话就结束。不是的话就进入do-while的循环中,进入scaner()这一个函数中进行判定。而这个scaner这一个函数主要包括三大块,主要是标识符,数字和符号,然后不断地用if 和else if 等语句来塞选这些字符串,然后来对他们分别进行种别码的对应。运行完scaner这一个函数后就进入一个switch-case的句子,根据我所设置的sym种别码进行判断,当遇到种别码为29也就是$这个字符的时候,整个程序也就结束。
流程图 如下
3.主要程序段及解释
判定
void scaner() { /* 共分为三大块,分别是标示符、数字、符号,对应下面的 if else if 和 else */ for(n=0;n<7;n++) compare[n]=0;//每次循环完就清零 ch=All[i]; while(ch==' '||ch==' ')//如果字符是空格或者回车,跳过 { i++; ch=All[i]; } if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) //可能是标示符或者变量名 { m=0; while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))//找到一个变量名或者关键字,直到遇到空格为止 { compare[m]=ch;m++; i++;ch=All[i]; } compare[m]='