资源描述:
《哈工大 威海 编译原理 实验一 词法分析.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、哈尔滨工业大学(威海)计算机学院编译原理实验报告姓名院系计算机学院学号任课教师指导教师实验地点宋健二楼机房实验时间实验名称实验一词法扫描器设计同组人无预习报告(对实验主要内容的认识)得分(1)根据附录给定的文法,从输入的类C语言源程序中,识别出各个具有独立意义的单词,即关键字、标识符、常数、运算符、分隔符五大类;分发见最后附录。(2)提供源程序输入界面;(3)词法分析后可查看符号表和TOKEN串表;(4)保存符号表和TOKEN串表(如:文本文件);遇到错误时可显示提示信息,然后跳过错误部分继续进行分析。实验内容(问题,思路,程序,结果)得分(1)开发环境:vs2010
2、(2)输入:在运行打开的软件下(win32格式),输入相应的代码(即要进行词法分析的字符串)(3)输出:在输入字符串后,按回车键后,既可以得到相应的词法分析的结果(4)在相应的运行程序的文件夹中生成一个txt文件,用来存储生成的Token链表(5)系统功能:1、关键字解析:"if""else""for""while""do""return""break""continue"。2、字符串分析:可以键入的类型以字母开头的,字符串中可以有数字和下划线。3、数字:数字的类型只能是整形的4、边界符:","";""{""}""("")5、运算符:"+","-","*","/"6、
3、关系符:"<","<=","=",">",">=","<>","=="7、错误检测:其他类型的输入,若错误类型在一起,则将所有的类型组成一个类型。(2)开发平台(操作系统、设计语言):1、操作系统:windows72、设计语言:c++3、编译器:vs2010(3)设计方案;1)主数据流图;开始接受字符串(用于词法分析)分析第一个字符的类型是字母?是数字?其他符号分析数字分析字符串和关键字分析进行下一次的分析直到完成结束2)主要数据结构:符号表、TOKEN串表等。//符号表classsymTable{private:char*symName;char*symStyle;
4、intsymLength;public:symTable*next;public:symTable();symTable(char*sysName,char*sysStyle,intsysLength);symTable(symTable&s);char*getName();char*getStyle();intgetLength();voidsymAdd(symTable*symFirst);voidprint();};(4)具体设计过程(包括主控程序、各个功能模块的具体实现)。1、主流程代码#include#include
5、#include"symtable.h"#include"calphaprocess.h"#include"digitprocess.h"#include"otherprocess.h"#include"addSymtable.h"usingnamespacestd;char*code=newchar[3000];//存放输入的代码intci;//在输入代码中的位置symTableToken=symTable("start","0",0);//token表的首地址char*consts[20];char*label[20];boolflag=true;intconst
6、num=0,labelnum=0;voidmain(void){for(inti=0;i<=20;i++){//实现表的清空label[i]=nullptr;consts[i]=nullptr;}cout<<"请输入的的代码";gets(code);//>>code;intcount=strlen(code);code[count]='^';//设置^为结束符ci=0;charbuffer;buffer=code[ci++];inti=0,j=0,k=0;symTablesymAlp[100];while((ci<=count)&&flag){if(isalpha
7、(buffer)){//symTable(symAlp[0]).init(alphaprocess(buffer));//symAlp[1].symAdd(&Token);symTable*symAlp=newsymTable(alphaprocess(buffer));//symTablesymAlp(alphaprocess(buffer));symAlp->symAdd(&Token);//addSystable(&Token,symAlp);buffer=code[ci++];while((buffer=='')&&(ci<=count)){