西安交大编译原理实验词法分析器(文档以及代码(最后))

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验一:词法分析器一、实验目的:1.强化对系统软件综合工程实现能力的训练;2.加强对词法分析原理、方法和基本实现技术的理解;二、实验内容:用C语言或者其他的高级语言作为宿主语言完成C1语言的词法分析器的设计和实现。三、实验要求:1.编写C0语言的词法分析器的源程序并调试通过。其中词法分析程序既可以自己手动去完成,也可以利用LEX自动生成。2.通过测试程序的验收;3.实验报告按照提供的模板填写:(1)功能描述:该程序具有什么功能?(2)程序结构描述:函数调用格式、参数含义、返回值描述、函数功能;另外可以附加函数之间的调用关系图、程序总体执行流程图。(3)实验总结:你在编程过程中花时多少?多少时间在纸上设计?多少时间上机输入和调试?多少时间在思考问题?遇到了哪些难题?你是怎么克服的?你对你的程序的评价?你的收获有哪些?四、评判标准:1.输出正确的实验结果;2.代码清晰,格式良好;3.提交报告,报告阐述清楚。五、程序工作说明:(以C0语言为例)程序的输入文件是任何一个目录下的文件格式的C0语言程序段。程序的输出文件是以xml格式表示的词法分析的结果。该输出将作为下个实验语法分析的输入文件。(注意:也可以自定义格式,但需要在报告中给出格式说明)词法分析结果输出成xml文件格式为rootTokenlineno=xxtype=’…’string=’…’/TokenTokenlineno=xxtype=’…’string=’…’/Token…/root程序输入/输出示例:如源程序为如下:1.voidf1(inta,intb){2.a=1;3.b=a+b;4.}5.voidmain()6.{7.inta[100];8.intb;9.floatc;10.a[b]=a;11.if(cb){12.f1(a,b);13.}14.}则要求得到如下输出文件:?xmlversion=1.0?roottokenline=1type=VOIDstring=void/tokenline=1type=IDstring=f1/tokenline=1type=LPARENstring=(/tokenline=1type=INTstring=int/tokenline=1type=IDstring=a/tokenline=1type=COMMAstring=,/tokenline=1type=INTstring=int/tokenline=1type=IDstring=b/tokenline=1type=RPARENstring=)/tokenline=1type=LBRACEstring={/tokenline=2type=IDstring=a/tokenline=2type=ASSIGNstring==/tokenline=2type=NUMBERstring=1/tokenline=2type=SEMIstring=;/tokenline=3type=IDstring=b/tokenline=3type=ASSIGNstring==/tokenline=3type=IDstring=a/tokenline=3type=ADDstring=+/tokenline=3type=IDstring=b/tokenline=3type=SEMIstring=;/tokenline=4type=RBRACEstring=}/tokenline=5type=VOIDstring=void/tokenline=5type=IDstring=main/tokenline=5type=LPARENstring=(/tokenline=5type=RPARENstring=)/tokenline=6type=LBRACEstring={/tokenline=7type=INTstring=int/tokenline=7type=IDstring=a/tokenline=7type=ASSIGNstring==/tokenline=7type=LSQUARstring=[/tokenline=7type=NUMBERstring=100/tokenline=7type=RSQUARstring=]/tokenline=7type=SEMIstring=;/tokenline=8type=INTstring=int/tokenline=8type=IDstring=b/tokenline=8type=SEMIstring=;/tokenline=9type=FLOATstring=float/tokenline=9type=IDstring=c/tokenline=9type=SEMIstring=;/tokenline=10type=IDstring=a/tokenline=10type=LSQUARstring=[/tokenline=10type=IDstring=b/tokenline=10type=RSQUARstring=]/tokenline=10type=ASSIGNstring==/tokenline=10type=IDstring=a/tokenline=10type=SEMIstring=;/tokenline=11type=IFstring=if/tokenline=11type=LPARENstring=(/tokenline=11type=IDstring=c/tokenline=11type=LTstring=/tokenline=11type=IDstring=b/tokenline=11type=LBRACEstring={/tokenline=12type=IDstring=f1/tokenline=12type=LPARENstring=(/tokenline=12type=IDstring=a/tokenline=12type=COMMAstring=,/tokenline=12type=IDstring=b/tokenline=12type=SEMIstring=;/tokenline=13type=RBRACEstring=}/tokenline=14type=RBRACEstring=}//root六、相关知识:词法分析器任务:输入源程序;扫描、分解字符串,识别出一个个单词(定义符、标识符、运算符、界符、常数)。单词符号的表示:1)需要对单词分类,每一个识别出来的单词都属于不同的类型publicenumTokenType{//关键字IF,ELSE,WHILE,RETURN,VOID,INT,//运算符+-*/===!=…PLUS,MINUS,STAR,SLASH,LT,LTEQ,GT,GTEQ,EQ,NEQ,ASSIGN,//界符;,()[]{}/**/SEMI,COMMA,LPAREN,RPAREN,LSQUAR,RSQUAR,LBRACE,RBRACE,LCOMMENT,RCOMMENT,ID,//标识符NUMBER,//数字常量『ID→letter(letter|didit)*NUMBER→digitdigit*letter→a|b|…|z|A|B|…|Zdigit→0|…|9』NONTOKEN,ERROR,ENDFILE//其它};2)单词符号的数据结构设计publicclassToken{stringstr;//单词字符串TokenTypettype;//单词的类型intline;//所在行号信息}3)词法分析状态转换图运行结果:Sdigit需要回退一个字符;不需要字符回退;开始状态;=非digit1234567digitletter非letter|digitrletter|digitrS89=!/+-*,;()[]{}@其他非**=非=非==非==非=非**非//S程序代码:#includeiostream#includefstream#includestring#includecstdlibusingnamespacestd;stringjudge1(chara[],intn){stringstr;str.assign(a,n);if(!str.compare(if))returnIF;elseif(!str.compare(else))returnELSE;elseif(!str.compare(while))returnWHILE;elseif(!str.compare(return))returnRETURN;elseif(!str.compare(void))returnVOID;elseif(!str.compare(int))returnINT;elseif(!str.compare(float))returnFLOAT;elseif(!str.compare(char))returnCHAR;return;}stringjudge2(chara[],intn){stringstr;str.assign(a,n);if(!str.compare(+))returnPLUS;elseif(!str.compare(-))returnMINUS;elseif(!str.compare(*))returnSTAR;elseif(!str.compare(/))returnSLASH;elseif(!str.compare(=))returnEQ;elseif(!str.compare())returnLT;elseif(!str.compare(=))returnLTEQ;elseif(!str.compare())returnGT;elseif(!str.compare(=))returnGTEQ;elseif(!str.compare(!=))returnNEQ;elseif(!str.compare(==))returnDEQ;elseif(!str.compare(…))returnASSIGN;elseif(!str.compare(;))returnSEMI;elseif(!str.compare(,))returnCOMMA;elseif(!str.compare(())returnLPAREN;elseif(!str.compare()))returnRPAREN;elseif(!str.compare([))returnLSQUAR;elseif(!str.compare(]))returnRSQUAR;elseif(!str.compare({))returnLBRACE;elseif(!str.compare(}))returnRBRACE;elseif(!str.compare(/*))returnLCOMMENT;elseif(!str.compare(*/))returnRCOMMENT;return;}voidprint(chara[],intn,intsign,intlin){stringTokenType;couttokenline=\lin\type=\;if(sign==1){TokenType=judge1(a,n);if(TokenType==)TokenType=ID;coutTokenType\string=\;for(inti=0;in;i++)couta[i];cout\/endl;}elseif(sign==2){TokenType=NUMBER;coutTokenType\string=\;for(inti=0;in;i++)couta[i];cout\/endl;}elseif(s

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功