编译原理词法分析器实验报.pdf





《编译原理词法分析器实验报.pdf》由会员分享,可在线阅读,更多相关《编译原理词法分析器实验报.pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、北华航天工业学院编译原理课程实验报告课程实验题目:词法分析器实验作者所在系部:计算机科学与工程系作者所在专业:计算机科学与技术作者所在班级:B08512 作 者 学 号:18 作 者 姓 名:李桂丁指导教师姓名:李建义完 成 时 间:2010 年 3 月 26 日一、实验目的了解词法分析程序的两种设计方法:1.根据状态转换图直接编程的方式;2.利用 DFA编写通用的词法分析程序。二、实验内容及要求1根据状态转换图直接编程编写一个词法分析程序,它从左到右逐个字符的对源程序进行扫描,产生一个个的单词的二元式,形成二元式(记号)流文件输出。在此,词法分析程序作为单独的一遍,如下图所示。源程序词法分析
2、程序记号文件具体任务有:(1)组织源程序的输入(2)拼出单词并查找其类别编号,形成二元式输出,得到单词流文件(3)删除注释、空格和无用符号(4)发现并定位词法错误,需要输出错误的位置在源程序中的第几行。将错误信息输出到屏幕上。(5)对于普通标识符和常量,分别建立标识符表和常量表(使用线性表存储),当遇到一个标识符或常量时,查找标识符表或常量表,若存在,则返回位置,否则返回0 并且填写符号表或常量表。标识符表结构:变量名,类型(整型、实型、字符型),分配的数据区地址注:词法分析阶段只填写变量名,其它部分在语法分析、语义分析、代码生成等阶段逐步填入。常量表结构:常量名,常量值2能对任何S 语言源程
3、序进行分析在运行词法分析程序时,应该用问答形式输入要被分析的S 源语言程序的文件名,然后对该程序完成词法分析任务。3能检查并处理某些词法分析错误词法分析程序能给出的错误信息包括:总的出错个数,每个错误所在的行号,错误的编号及错误信息。4.本实验要求处理以下两种错误(编号分别为1,2):1:非法字符:单词表中不存在的字符处理为非法字符,处理方式是删除该字符,给出错误信息,“某某字符非法”。2:源程序文件结束而注释未结束。注释格式为:/*/三、实验程序设计说明1实验方案设计Scanner close Isalpha Isnumber Isanotation Output Isother Error
4、 主函数Initscanner Lexscan 2程序源代码#include#include#include#include using namespace std;string keywords20=include,void,main,int,char,float,double,if,else,then,break,continue,for,do,while,printf,scanf,begin,end,return;char aa99999=;string id10000;int pp=0;string nu10000;int qq=0;void initscanner()/程序初始化:输
5、入并打开源程序文件和目标程序文件,初始化保留字表 int i=0;FILE*fp;if(fp=fopen(a.txt,r)=NULL)printf(Open error!);exit(0);char ch=fgetc(fp);while(ch!=EOF)aai=ch;i+;ch=fgetc(fp);fclose(fp);int decide1(char a)/判断是否是字母 if(a=a&a=A&a=0&a=9)return 1;else return 0;int isalpha(int st)/识别保留字和标识符 char wordbuf20=;int n=0;for(;)wordbufn=
6、aast;st+;n+;if(decide2(aast)=1)|(decide1(aast)=1)|(aast=_)wordbufn=aast;else break;int flag=0;for(int k=0;k20;k+)if(strcmp(keywordsk.c_str(),wordbuf)=0)flag=1;if(flag=0)int flagg=-1;for(int t=0;tpp;t+)if(strcmp(idt.c_str(),wordbuf)=0)flagg=t;if(flagg!=-1)printf(id,%d),flagg);else idpp=wordbuf;printf
7、(id,%d),pp);pp+;else printf();for(int i=0;in;i+)printf(%c,wordbufi);printf(,-);return st;int isnumber(int st)/识别整数,如有精力,可加入识别实数部分工功能 char numbuf20=;int n=0;int k=0;int flag=0;for(;)numbufn=aast;st+;n+;if(decide2(aast)=1)numbufn=aast;else if(k=0)&(aast=.)numbufn=aast;k+;else if(decide1(aast)=1)numbuf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 词法 分析器 实验

限制150内