词法分析— 实验报告
2016-10-26 22:54 216-陈文建 阅读(502) 评论(3) 编辑 收藏 举报实验一.词法分析
一. 实验目的
(1) 编译一个词法分析程序
(2) 主要是从键盘输入一串字符,然后从左到右依次对字符进行识别,分成一个个独立的单词序列,并且进行词法分析。
二.实验内容
(1) 输入:源程序字符串
(2) 输出:二元组(种别,单词符号本身)
三.实验要求
1.对字符串表示的源程序
2.从左到右进行扫描和分解
3.根据词法规则
4.识别出一个一个具有独立意义的单词符号
5.以供语法分析之用
四.实验方法,步骤及测试结果
(1)流程图:
(2)主要代码:
for(i=0;i<n;i++) { j=(int)n[i]; n1[i]=n[M]; if((j>=65)&&(j<=90)||(j>=90)&&(j<=122)) { n1[i1]=n[i]; i1++; } else{ while(i1!=0) { n1[i1]='\0'; if( strcmp(n1,"auto")==0||strcmp(n1,"int")==0||strcmp(n1,"double")==0||strcmp(n1,"long")==0 ||strcmp(n1,"char")==0||strcmp(n1,"float")==0||strcmp(n1,"short")==0||strcmp(n1,"signed")==0 ||strcmp(n1,"unsigned")==0||strcmp(n1,"struct")==0||strcmp(n1,"union")==0||strcmp(n1,"enum")==0 ||strcmp(n1,"static")==0||strcmp(n1,"switch")==0||strcmp(n1,"case")==0||strcmp(n1,"default")==0 ||strcmp(n1,"break")==0||strcmp(n1,"register")==0||strcmp(n1,"const")==0||strcmp(n1,"volatile")==0 ||strcmp(n1,"typedef")==0||strcmp(n1,"extern")==0||strcmp(n1,"return")==0||strcmp(n1,"void")==0 ||strcmp(n1,"continue")==0||strcmp(n1,"do")==0||strcmp(n1,"while ")==0||strcmp(n1,"if")==0 ||strcmp(n1,"else")==0||strcmp(n1,"for")==0||strcmp(n1,"goto")==0||strcmp(n1,"sizeof")==0) { n1[i1]=')'; printf("(1,"); puts(n1); i1=0; memset(n1,0,100); }
(3)测试结果
:
五.实验心得
这是我第一次接触关于编译原理的大实验,在这次实验里面,有很大的问题一直很困扰。
(1)首先是词法分析的算法思想,不明白它的中心思想就无法下手,课本也没有太多关于这方面的知识,所以我只有向同学和网上寻找,在查找过程中也能大概了解了。
(2)在定义的数组方面,一些代码很容易被混乱了,因为需要运行的变量比较多,所以经常有很多的错误提示。
心得:虽然这次的实验总体来说不算良好,但是在老师,同学的帮助下还是能把它完成了,也让我明白了自己的问题所在,对于这门课程,需要花费更多的时间和精力才能更好的去理解它。当 然,程序中还是存在着很多的问题,希望各位能够积极指出,谢谢。