网站大量收购独家精品文档,联系QQ:2885784924

编译技术课程的设计词法分析器.docxVIP

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译技术课程的设计词法分析器

编译技术课程设计班 级 软件工程0802 学 号 3080608047 姓 名 指导老师 2011年 6月目得编译技术是理论与实践并重的课程,而其实验课要综合运用一、二年级所学的多门课程的内容,用来完成一个小型编译程序。从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。任务和要求基本要求:词法分析器产生下述小语言的单词序列这个小语言的所有的单词符号,以及它们的种别编码和内部值如下表:单词符号种别编码助记符内码值DIMIFELSEWHILEDOTHENBEGINEND标识符常数(整)=+-*/**,,()关系运算符||~123456789101112131415161718192021222324$DIM$IF$ELSE$WHILE$DO$THEN$BEGIN$END$ID$INT$ASSIGN$PLUS$MINUS$STAR$DIV$POWER$COMMA$SIMICOLON$LPAR$RPAR$ROP$AND$OR$NOT------内部字符串标准二进形式------//$NOTESLINE /*$NOTESL*/$NOTESRSTOP27对于这个小语言,有几点重要的限制:首先,所有的关键字(如IF﹑WHILE等)都是“保留字”。所谓的保留字的意思是,用户不得使用它们作为自己定义的标示符。例如,下面的写法是绝对禁止的: IF(5)=x 其次,由于把关键字作为保留字,故可以把关键字作为一类特殊标示符来处理。也就是说,对于关键字不专设对应的转换图。但把它们(及其种别编码)预先安排在一张表格中(此表叫作保留字表)。当转换图识别出一个标识符时,就去查对这张表,确定它是否为一个关键字。再次,如果关键字、标识符和常数之间没有确定的运算符或界符作间隔,则必须至少用一个空白符作间隔(此时,空白符不再是完全没有意义的了)。例如,一个条件语句应写为 IF i0 i= 1;而绝对不要写成              IFi0 i=1;因为对于后者,我们的分析器将无条件地将IFI看成一个标识符。这个小语言的单词符号的状态转换图,如下图:语法分析器能识别由加+ 减-乘* 除/ 乘方^括号()操作数所组成的算术表达式,其文法如下:S→a=EE→E+T|E-T|TT→T*F|T/F|FF→P^F|Pp→(E)|i其中a代表标识符,i代表标识符或常量布尔表达式,其文法如下:B→B﹀T|TB→T︿F|FF→﹁P|PP→(B)|iropi|i条件语句表达式,其文法如下: S→IF e THEN S ELSE S||WHILE e DO S|BEGIN L END|aL→S;L|S其中e代表布尔表达式,a代表赋值表达式使用的算法可以是:预测分析法;递归下降分析法;算符优先分析法;LR分析法等。3.中间代码生成器产生上述算术表达式的中间代码(四元式序列)较高要求:扩充上述小语言的单词;增加语法分析器的功能,能识别条件语句和循环语句等;增加中间代码生成器的功能,能产生条件语句和循环语句等的中间代码(四元式序列)增加报错功能;将中间代码翻译成汇编语言。实现过程和说明词法分析LexAnalysis类通过使用Info类来读取文件中的字符,并通过自动机的方式来识别关键字,字符,常量,关系运算符,注释等,最终把识别到的词放到Info类的ResultOfLexTable变量数组中,标识符还要放到标识符SymbolTable变量数组中。还要把词法分析结果写到four.txt文档中,以便读取到用户界面。同时词法分析还能够将不能识别的符号提示用户出错了,并告诉用户错在什么位置。语法分析语法分析使用LL(1)自顶向下的分析方法,整个分析过程通过StmtParse类来完成,在运行过程中遇到bool表达式使用类BoolParse来帮助分析,遇到赋值表达式使用ExprParse类来帮助分析,在分析过程中可以报告错误,并有一定的容错性,使得语法分析不会由于错误而停止分析,会继续分析。语法分析的词素来自Info类。上面的图没有显示Info类。语义分析语义分析也就是语法制导生成四元式,语义分析用的是SLR文法,自底向上的分析方法,其中StmtSemantic类用来语法制导翻译,当遇到赋值表达式时使用ExprSemantic类来翻译,遇到布尔表达式时用BoolSemantic来翻译。BoolTF类是BoolSemantic类用来存放真假出口链的,用于回填。StmtTF类被StmtSemantic类,用于存放语句的用于回填的链。CommonFuntion是一些用于全局的变

文档评论(0)

3471161553 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档