- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验三语义剖析程序实现
一、实验目的与要求
在实现词法、语法剖析程序的基础上,编写相应的语义子程序,进行语义办理,加深对语法制导翻译原理的理解,进一步掌握将语法剖析所识其余语法范围变换为某种中间代码(四元式)的语义剖析方法,并达成有关语义剖析器的代码开发。
二、一般实现方法
语法制导翻译模式是在语法剖析的基础上,增添语义操作来实现的,其实是对前后文没关文法的一种扩展。一般而言,第一需要依据进行的语义剖析工作,达成对给定文法的必需拆分和语义动作的编写,进而为每一个产生式都装备相应的语义子程序,以便在进行语法剖析的同时进行语义解说。即在语法剖析过程中,每当用一个产生式进行推导或归约时,语法剖析程序除履行相应的语法剖析动作以外,还要调用相应的语义子程序,以便达成生成中间代码、查填有关表格、检查并报告源程序中的语义错误等工作。每个语义子程序需指明相应产生式中各个符号的详细含义,并规定使用该产生式进行剖析时所应采纳的语义动作。这样,语法制导翻译程序在对源程序从左到右进行的一遍扫描中,既达成语法剖析任务,又达成语义剖析和中间代码生成方面的工作。本实验要求从编译器的整体设计出发,要点经过对实验二中语法剖析程序的扩展,达成一个编译器前端程序的编写、调试和测试工作,形成一个将源程序翻译为中间代码序列的编译系统。
三、实验内容
基本实验题目:
对文法G2[算术表达式]中的产生式增添语义办理子程序,达成运算对象是简单变量(表记符)和无符号数的四则运算的计值办理,将输入的四则运算变换为四元式形式的中间代码。
输入:
1/23
包括测试用例(由表记符、无符号数和+、-、*、/、(、)组成的算术表达式)的源程序言件。
输出:
将源程序变换为中间代码形式表示,并将中间代码序列输出到文件中。若源程序中有错误,应指犯错误信息。
五、源程序
includestdio.h
includectype.h
includestring.h
includemath.h
includestdlib.h
defineUNKNOWN-1
defineLB0
defineRB1
definePL2
defineMI3
defineMU4
defineDI5
defineUCON6//Supposetheclassnumberofunsignedconstantis7#define
OVER
defineLT8
defineLE9
2/23
defineEQ10
defineNE11
defineGT12
defineGE13
defineIS19//14至18被五个要点字占用
defineID20
#defineMAX_KEY_NUMBER20/*要点字的数目*/
#defineKEY_WORD_ENDwaitingforyourexpanding/*要点字结束标志*/char*KeyWordTable[MAX_KEY_NUMBER]={begin,end,if,then,else,KEY_WORD_END};
charTOKEN[20]=;//储存已扫描的单词
charch=;//用于储存带判断的字符
introw=1;
////////////////////////无符号数部分
#defineDIGIT1
#definePOINT2
#defineOTHER3
#definePOWER4
#definePLUS5
#defineMINUS6
#defineClassOther200
#defineEndState-1
3/23
intindex=0;
intw,n,p,e,d;
intClass;//Usedtoindicateclassoftheword
intICON;
floatFCON;
staticintCurrentState;//Usedtopresentcurrentstate,theinitial
value:0////////////////////////语法剖析部分
////////////////////////产生式
//
1、E-E+T
2、E-E-T
3、E-T
4、T-T*F
5、T-T/F
6、T-F
7、F-(E)
8、F-i
#defineSMAX256
///////////////////////goto表的列项
#defineE0
#defineT1
4/23
#defineF2
intStateStack[SMAX];//状态栈
intStackPoint;//状态栈指针
intTopState;//作为状态栈盏栈顶指针
intInputWordType;//输入的单词种类
////////////////( )+-*/i#charAction[16][8][4]={s4,,,,,,s5,,
,,s6,s7,,,,A,
r3
原创力文档


文档评论(0)