编译原理语法分析实验报告_第1页
编译原理语法分析实验报告_第2页
编译原理语法分析实验报告_第3页
编译原理语法分析实验报告_第4页
编译原理语法分析实验报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编译原理语法分析实验报告 编译原理语法分析实验报告 02282021赖荣凤 1. 实验目的 编写一语法分析器,锻炼团队工作能力 2. 实验环境 Windows XP VC+6. 0 3. 实验内容 这次实验中我的任务就是:设计程序框架,制定编译器文法,作出状态转换图 并编写部分程序代码。 这次实验任务较重,为了更好组织大家一起动手实验,山我和黄曙丰统一策划 这次实验安排。我们用递归下降分析方法,为每一标识符编写一分析子程序。 我跟黃曙丰先制定了本编译器的32条文法规则。 SmartC语言的EBNF文法规则语法: 1. program - declarat ionli st 2. declara

2、tionlist declaration declaration 3. declaration - var-declarationfun-declaration 4. var-declaration type-specifier ID ; I type-specifier ID NUM ; 5. type-specifier int ! void 6. fun-declaration type-specifier ID ( params ) compound-stmt 7. params - params-list i void 8. param-list param , param 9. p

3、aram - type-specifier ID type-specifier ID J 10. compound- stmt - local-declarations statement-list (注:该处左右大括号是真正意义上的大括号) 11. local-declarations - var-declaration var-declaration ! empty 12. statement-list - statement statement I empty 13. statement - expression-stmt j compound-stmt i selection-stmt

4、 -stmt iteration-stmt return 14. expression-stmt - expression ; I ; 15. selection-stmt - if ( expression ) statement else statement (注:该处左右中括号是唯一表示内容可选的中括号)16. iteration-stmt - while ( expression ) statement for(expression;expression;expression) statement 17. return-stmt - return ; I return expressi

5、on; 18. expression - var = expression simple-expression I logical- expression 19. var - ID ID value! 20. simple-expression - additive-expression relop additiveexpression additive-expression 21. logical-expression- simple-expression logical simple-expression logical logical-expression)I ! simple-expr

6、ession logical logical-expression 22 logical- ,) simple_expression term II + - (,id, num, !, ;,) expression simple_expression =!= simple_expression Void, int ) params int id void .value Int, void programe declaration Int, void Int,void int declaration id ; void num id, if, while, for, return, ,; Els

7、e,), id, if, while, for, return, , ; ( params ) Compound_s tmt statement =;id expression value Compound_stmt expression statement ) if ( statement else )statement while expression ( statement ) statement expression statement for (; return ; expression Else, , id, if, while, for, return, , ; compound

8、_stmt int num J void statement ;id 根据文法规则和状态转换图,我们将语法法分析做成一个类。为每一个标识符 编写一个分析 程序。类的结构如下: Koken TOuN CGuljXjtTfo%“ 3说sliMrhGMp W时姑 卜 o乩 kiiQr c佔 Zf i hoi :uenl int h-arth ml 鸟 inac - rv jVGr (hetdr:匕dir :伽曰 r,. ziitr* cokrn hrth : ri 阳FnOfFr牟怖询卿 ?Rr-riil5v:Hl rlw :0irrplcc:prcc:iorr rzScl4| : itcgci c

9、r Fi-clScl|i Irvtcqcv 殆T=g:prc ” icn卅“get ST孑押朋卜心百列2| M刖即 8ilar?jt crFi:Sel|21 Itiityei Inlier lnle?er TnrtorTcalc於?:卩 4 Irlcccr | rrftjar 溶UiTFWW呼农mM冋的列 Sfg广 Frrdi) p:mu 3ct:-J3Ci) 七们恥疔To kcmTCkr-r)O 挣mJ 佥be琢C Dt %游lews冇R imeetr 唏 J-8dFarsrii5FcllaSl1| Ixcqui *iC cclaRl crFolcvxSr:|? Integer fcGtyz

10、evcrirol -oS|S 5冷尹 矽:Eg ITl_ilir/,V Sfiri;* rtrij? f “卜 c ck input (rd frveill.ifii lkx遏 1 rr. i t -u*n jiii f ulwrumi i) (*fa;iorfi irr Fla;pm ioru) kn忙 冉“e歩crC j-e.:preion3 Rfs 亓 wsQ rC-sthRl uC ?*GtxonncriQ OrMjvl-VWtO 戏汕 *rr I arypftj (i ;U:创W【上厂勺机(;0叶1儈狩“ 环伽;I 舛吃护I叶o 下面解释各函数的作用: Syntax (); 构造函数

11、,对各标识符的first follow集进行赋值 void Programe(); /整个程序对外接口,调用这个子程序分析源代码 int Scanto(int synchset, int n): y.:pife 料 IUI IFu lveC2: hit yv i /扫描源程丿了;,直到肖前token在synchset 之中为止 int Checkinput(int firstset, int followset, int firstnum, int follownum); /检查当前token是否在firstset之中, /若不在就向下扫描源程序直到当前token在firstset 或foll

12、owset 之中 为止 /也就是检查程序代码是否出错,如果出错则向下读直到可以确认为新起点为 止 int Match(int tokentype); /用1 前 token, tokentype 与 tokentype 比较, /若相同则读下一个token,否则进行错误处理void Value(); 匹配标识符Value的子程序 /程序处理的是一个数(通过各种方式得到的一个数)如:变量,常量,数组, 函数 返回值 参阅状态转换图(自动机) void Factor (); 匹配标识符Factor的子程序 程序处理的是项中的一个因子,处理优先级最高的操作符(), 参阅状态转换图(自动机) void

13、 Term(); 匹配标识符Term的子程序 程序处理的是简单表达式中的一个项,处理优先级第二高的操作符*, *, /匹配标识符Simp 1 e_express ion的子程序 程序处理的是表达式中的简单表达式,处理优先级较低的操作符+,-,11 参阅状态转换图(自动机) void Expression(); /匹配标识符Expression的子程序 处理优先级最低的关系操作符=,匸, ,=,二/程序处理的是语句体中的表 达式, 参阅状态转换图(自动机) void Forexpression(); /匹配标识符Forexpression的子程序 程序处理的是基本语句中的赋值语句和函数调用 /这

14、个子程序是为处理for语句中的初始化 参阅状态转换图(自动机) void Params (); 匹配标识符Pdwins的子程序 程序处理的函数声明时的,参数声明部分 参阅状态转换图(自动机) void Declaration(); /匹配标识符Declaration的子程序 程序处理的全局变量声明,函数声明 参阅状态转换图(自动机) void Statement(); /匹配标识符Statement的子程序 /程丿芋处理的是复合语句体中的基本语句, /如:IF语句,WHILE语句,FOR语句,RETURN语句,赋值语句,函数调用语 句 参阅状态转换图(自动机) void Compound_stmt(); /匹配标识符Compound_stmt的子程序 /程序处理的是复合语句体,包括局部变量声明,和基本语句处理 参阅状态转换图(自动机) COutputTreeView* ptree/view;信息输出窗口 TOKEN temptoken; /记录程序当前分析的token所有程序可分成两类,一类 程序是进行错误处理的,如:int Scanto(int synchset J, int n); int Checkinput(int firstset, int follo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论