C语言词法分析器构造实验报告.doc

C语言词法分析器构造实验报告.doc

ID:58487294

大小:130.00 KB

页数:8页

时间:2020-05-16

C语言词法分析器构造实验报告.doc_第1页
C语言词法分析器构造实验报告.doc_第2页
C语言词法分析器构造实验报告.doc_第3页
C语言词法分析器构造实验报告.doc_第4页
C语言词法分析器构造实验报告.doc_第5页
资源描述:

《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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。