版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译原理语法剖析实验报告02282021赖荣凤1.实验目的编写一语法剖析器,锻炼团队工作能力2.实验环境WindowsXPVC++6.0实验内容此次实验中我的任务就是:设计程序框架,拟订编译器文法,作出状态变换图并编写部分程序代码。此次实验任务较重,为了更好组织大家一同着手实验,由我和黄曙丰一致策划此次实验安排。我们用递归降落剖析方法,为每一表记符编写一剖析子程序。我跟黄曙丰先拟订了本编译器的32条则法例则。SmartC语言的EBNF文法例则语法:program->declaration-listdeclaration-list->declaration{declaration}declaration->var-declaration|fun-declaration4.var-declaration->type-specifierID;|type-specifierID[NUM];type-specifier->int|voidfun-declaration->type-specifierID(params)compound-stmtparams->params-list|void8.param-list->param{,param}param->type-specifierID|type-specifierID[]compound-stmt->{local-declarationsstatement-list}(注:该处左右大括号是真实意义上的大括号)11.local-declarations->var-declaration{var-declaration}|empty12.statement-list->statement{statement}|empty13.statement->expression-stmt|compound-stmt|selection-stmt|iteration-stmt|return-stmtexpression-stmt->expression;|;selection-stmt->if(expression)statement[elsestatement](注:该处左右中括号是独一表示内容可选的中括号)iteration-stmt->while(expression)statement|for(expression;expression;expression)statementreturn-stmt->return;|returnexpression;expression->var=expression|simple-expression|logical-expressionvar->ID|ID[value]simple-expression->additive-expressionrelopadditive-expression|additive-expressionlogical-expression->simple-expressionlogicalsimple-expression{logicallogical-expression}|!simple-expression{logicallogical-expression}22logical->&&|||23.relop-><=|>=|<|>|==|!=additive-expression->term{addopterm}addop->+|-term->factor{mulopfactor}mulop->*|/factor->(simple-expression)|(logical-expression)|valuevalue->var|call|NUMcall->ID(args)args->{arg-list}arg-list->expression{,expression}而后由我依据这些文法例则画出了本编译器的状态变换图
,并确立各表记符的
First集和
Follow集。id,numFirstSet*,/,&&,+,-,||,<=,<,>,>=,==,!=,;,),]FollowSetvalueid[value]( ),expressionnum(,id,num,!*,/,&&,+,-,||,<=,<,>,>=,==,!=,;,)factor(expression)!factorvalue(,id,num,!+,-,||,<=,<,>,>=,==,!=,;,)termfactor*/&&(,id,num<=,<,>,>=,==,!=,;,)simple_expressionterm+-||(,id,num,!,;,)expressionsimple_expression<=<>>===!=simple_expressionVoid,int)params,intidvoid[value]Int,voidprogramedeclarationInt,voidInt,voiddeclarationintid;void[num]id,if,while,for,return,{,;Else,},id,if,while,for,return,{,;(params)Compound_stmtstatementid=expression;[value]Compound_stmtif(expression)statementelsestatementwhile(expression)statementfor(statement;expression;statement)statementreturn;expression{compound_stmtElse,},id,if,while,for,return,{,;{}[num]intvoidstatement;id依据文法例则和状态变换图,我们将语法法剖析做成一个类。为每一个表记符编写一个剖析程序。类的结构以下:下边解说各函数的作用:Syntax( );//结构函数,对各表记符的firstfollow集进行赋值voidPrograme( );整个程序对外接口,调用这个子程序剖析源代码intScanto(intsynchset[],intn);扫描源程序,直到目前token在synchset[]之中为止intCheckinput(intfirstset[],intfollowset[],intfirstnum,intfollownum);检查目前token能否在firstset之中,若不在就向下扫描源程序直到目前token在firstset[]或followset[]之中为止也就是检查程序代码能否犯错,假如犯错则向下读直到能够确以为新起点为止intMatch(inttokentype);//用目前token.tokentype与tokentype比较,//若同样则读下一个token,不然进行错误办理voidValue( );//般配表记符Value的子程序//程序办理的是一个数(经过各样方式获得的一个数)如:变量,常量,数组,函数返回值//参阅状态变换图(自动机)voidFactor( );//般配表记符Factor的子程序//程序办理的是项中的一个因子,办理优先级最高的操作符(),!//参阅状态变换图(自动机)voidTerm( );//般配表记符Term的子程序//程序办理的是简单表达式中的一个项,办理优先级第二高的操作符*,*,&&//参阅状态变换图(自动机)voidSimple_expression( );//般配表记符Simple_expression的子程序//程序办理的是表达式中的简单表达式,办理优先级较低的操作符+,-,||//参阅状态变换图(自动机)voidExpression( );//般配表记符Expression的子程序//程序办理的是语句体中的表达式,办理优先级最低的关系操作符==,!=,>,>=,<,<=//参阅状态变换图(自动机)voidForexpression( );//般配表记符Forexpression的子程序//程序办理的是基本语句中的赋值语句和函数调用//这个子程序是为办理for语句中的初始化//参阅状态变换图(自动机)voidParams( );//般配表记符Params的子程序//程序办理的函数申明时的,参数申明部分//参阅状态变换图(自动机)voidDeclaration( );//般配表记符Declaration的子程序//程序办理的全局变量申明,函数申明//参阅状态变换图(自动机)voidStatement( );//般配表记符Statement的子程序//程序办理的是复合语句体中的基本语句,//如:IF语句,WHILE语句,FOR语句,RETURN语句,赋值语句,函数调用语句//参阅状态变换图(自动机)voidCompound_stmt( );//般配表记符Compound_stmt的子程序//程序办理的是复合语句体,包含局部变量申明,和基本语句办理//参阅状态变换图(自动机)COutputTreeView*ptreeview;//信息输出窗口TOKENtemptoken;//记录程序目前剖析的token全部程序可分红两类,一类程序是进行错误办理的,如:intScanto(intsynchset[],intn);intCheckinput(intfirstset[],intfollowset[],int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某汽车制造装配制度
- 食品和饮料用氮气发生器全球市场总体规模
- 2026电网会计面试题目及答案
- 2026耕地抛荒面试题及答案
- 人工智能在金融衍生品定价中的作用
- 2026宏观量化面试题及答案
- 2026监测岗位面试题及答案
- 光机电一体化公司项目经理述职报告
- 软件开发工程师年度述职总结
- 泰安地坪施工方案
- 钢结构构件试验检测方案
- 医疗人工智能伦理规范
- 湘钢岗前培训考试试题及答案
- 公司例会管理制度
- DB15∕T 3937-2025 典型地物遥感智能解译技术规程
- GB/T 191-2025包装储运图形符号标志
- 桥梁施工夏季施工方案
- 以赛促教 课题申报书
- 防锈处理工作业指导书
- 急诊护理培训课件
- 招聘面试识人有术面试官培训讲师手册
评论
0/150
提交评论