欢迎来到天天文库
浏览记录
ID:58487294
大小:130.00 KB
页数:8页
时间:2020-05-16
《C语言词法分析器构造实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译原理C语言词法分析器构造学院:信工班级:140学号:201114002姓名:马鹏程指导教师:张帆2014年6月12日一、实验题目:编译原理词法分析二、实验内容:2.1主程序设计考虑:主程序的说明部分为各种表格和变量安排空间(关键字和特殊符号表)。id和ci数组分别存放标识符和常数;还有一些为造表填表设置的变量。主程序的工作部分建议设计成便于调试的循环结构。每个循环处理一个单词;调用词法分析过程;输出每个单词的内部码(种别编码,属性值)。建议从文件中读取要分析的符号串。2.2词法分析过程考虑该过程根据输入单词的第一个有效字符(有时还需读第二个字符),判断单词
2、种别,产生种别编码。对于标识符和常数,需分别与标识符表和常数表中已登记的元素相比较,如表中已有该元素,则记录其在表中的位置,如未出现过,将标识符按顺序填入数组id中,将常数存入数组中ci中,并记录其在表中的位置。注:所有识别出的单词都用二元组表示。第一个表示单词的种别编码。例如:关键字的t=1;标识符的t=2;常数t=3;运算符t=4;界符t=5。第二个为该单词在各自表中的指针或内部码值(常数表和标识符表是在编译过程中建立起来的。其i值是根据它们在源程序中出现的顺序确定的)。关键字和特殊符号如下(表中数字只是标记,不代表种别编码,种别编码自己定义):编号123
3、45678910名字intcharfloatvoidconstifelsedowhilescanf编号11121314151617181920名字printfreturnmainread+–*/%=编号21222324252627282930名字==><!=>=<=&&
4、
5、!<>编号31323334353637383940名字(){};,“‘++--将词法分析程序设计成独立一遍扫描源程序的结构。其主流程图如下:图1词法分析程序流程图三、程序源代码:#include"stdafx.h"#include#include#incl
6、ude#includeusingnamespacestd;//关键字结构体structkey{stringkey_word;intbm;stringzjf;};//界符结构体structJF{charjf_ch;intbm;stringzjf;};//运算符结构体structysf{stringysf_w;intbm;stringzjf;};//得到关键字字母表voidfuc_K_table(keyK_w[]){inti=0;ifstreaminfile("E:\cffx\key.txt",ios::in);if(!inf
7、ile){cerr<<"openerror!"<>K_w[i].key_word;infile>>K_w[i].bm;infile>>K_w[i].zjf;}infile.close();}//得到界符字母表voidfuc_JF_table(JFJ_CHAR[]){inti=0;ifstreaminfile("E:\cffx\jf.txt",ios::in);if(!infile){cerr<<"openerror!"<>J_CHA
8、R[i].jf_ch;infile>>J_CHAR[i].bm;infile>>J_CHAR[i].zjf;}infile.close();}//得到运算符表voidfuc_ysf_table(ysfYSF_W[]){inti=0;ifstreaminfile("E:\cffx\ysf.txt",ios::in);if(!infile){cerr<<"openerror!"<>YSF_W[i].ysf_w;infile>>YSF_W[i].bm;infile>>YSF_W[i].zjf;}in
9、file.close();}//查找是否为保留字intReserve(stringstrToken,keyK_w[]){inti=0;for(i=0;i<12;i++)if(strToken==K_w[i].key_word)returnK_w[i].bm;if(i>=12)return-1;}//查找是否为界符intReservejf(charch,JFJ_CHAR[]){inti=0;for(i=0;i<9;i++)if(ch==J_CHAR[i].jf_ch)returnJ_CHAR[i].bm;if(i>=9)return-1;}//查找是否为运算符i
10、ntReserveysf(string
此文档下载收益归作者所有