实验一、词法分析实验
专业 商业软件3班 姓名 陈笑璞 学号 201506110218
一、 实验目的
(1) 编制一个词法分析程序
(2) 词法分析是编译的第一个阶段,主要任务是从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用于语法分析。
(3) 通过词法分析的练习,能够进一步了解编译原理。
(4) 通过了解词法分析程序的设计原则、单词的描述技术、识别机制及词法分析程序的自动构造原理。
二、 实验内容和要求
(1) 输入:源程序字符串
(2) 输出:二元组(种别,单词符号本身)。
三、 实验方法、步骤及结果测试
实验方法、步骤:
(1) 对字符串表示的源程序
(2) 从左到右进行扫描和分解
(3) 根据词法规则
(4) 识别出一个一个具有独立意义的单词符号
(5) 以供语法分析之用
(6) 发现词法错误,则返回出错信息
2、原理分析: 我的设计思路是利用链队列(好处:先进先出且不浪费存储空间)进行存储用户输入字符串,
以回车键结束(其中必须以非数字结尾,否则程序出错)(这是我在后来的编程里遇到的问题,我知道问题出在哪里,
但我现在还解决不了,因为我是通过申请子针域来存储,所以我是利用p->next来作为判断结束条件,
如果以数字结束,那p->next指向未知领域,程序出错,同时这也是很危险的),然后我是利用出队列来判断,
如果是字母存进数组里,直到下一个字符不是字母,调用函数判断数组的字符串,利用strcmp来判断,输出数组,再清空数组;
void Print(char str[])//调用函数来判断关键字与标识符并输出 { int i=0; if(strcmp(str,"begin")==0) printf("(1,'%s') ",str); else if(strcmp(str,"if")==0) printf("(2,'%s') ",str); else if(strcmp(str,"then")==0) printf("(3,'%s') ",str); else if(strcmp(str,"while")==0) printf("(4,'%s') ",str); else if(strcmp(str,"do")==0) printf("(5,'%s') ",str); else if(strcmp(str,"end")==0) printf("(6,'%s') ",str); else { if(str[0]=='