语法分析器的设计精选.pdfVIP

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

编译原理实验指导书 《编译原理》综合性实验二: 语法分析器的设计 实验目的:掌握高级语言语法结构的定义,掌握语法分析的常用方法――递归下降的分析方 法。 实验要求:在 6 学时内完成全部内容,要求用 VC ++窗口界面实现。 实验内容:分为 3 次实验内容完成。 2.1 语法分析程序的设计要求 语法分析程序要求能实现 Sample 语言中几种最常见的、基本的语法单位的分析:算术 表达式、逻辑表达式、赋值语句、IF 语句、for 语句、while 语句、repeat 语句等,各个语法 单位的定义见第 1 章,要求有完整的程序和说明。 2.2 语法分析程序的设计方法 语法分析程序可以根据个人的掌握情况选用常见的几种语法分析方法:递归下降分析方 法、LL(1)预测分析法、算符优先分析、LR 分析等方法中的任何一种来实现,也可以选用不 同的方法来分析不同的语法成分,最后再综合起来。 2.3 语法分析程序的数据流图 词法分析程序把源程序变成 TOKEN 串,存放在 TOKEN 文件中。这个文件是 Sample 语言语法分析程序的输入文件。 语法分析的任务就是根据语言的语法定义(产生式)判断输入的 token 文件是否符合语法 规则的定义,如果符合某个语法成分的定义,就是正确的定义。 图2-1 语法分析程序的顶层数据流图 语法分析的过程就是不断地读入 token 文件中的单词,根据不同的语法单位(语句) ,使 用不同的方法进行分析,直到 token 文件的结束。 源程序的组织结构(去掉了注释等无用部分)是:程序头部,说明部分和可执行部分,所 以要分别进行处理。 Sample 语言的特点是每个部分有一个前导词,程序头部以 program 开头,变量说明以 var 开头,常量说明是以 const 开头的,从 begin 开始就是可执行语句,可执行语句分为五种: for 语句( 以for 语句开头) ,while 语句( 以while 开头) ,if 语句( 以if 开头) ,repeat 语句( 以repeat 编译原理实验指导书 开头) ,赋值语句( 以标识符开头) 。每当读到前导词,表明一个新的语法结构的开始,以此 识别该语法单位是否符合定义。下图是语法分析程序的详细数据流图。 图2-2 语法分析程序的详细数据流图 在语法分析过程中,各种语句的处理可以采用不同的语法分析方法,实验中希望能够使 用两种语法制导翻译技术:一是对各个语句和布尔表达式采用递归下降翻译法,二是对算术 表达式采用自底向上的算符优先分析方法。 根据采取的语法分析方法不同,就得到不同的详细数据流图。如下图是使用算符优先分 析方法的数据流。 图2-3 算符优先分析的数据流图 编译原理实验指导书 图2-4 算符优先分析的详细数据流图 但不管使用哪种语法分析方法,必须根据语法定义,下面详细说明变量说明的处理方法。 变量说明以var开头,格式如下: 变量说明::=var 变量定义| ε 变量定义::=标识符表:类型;|标识符表:类型;变量定义 标识符表::=标识符, 标识符表|标识符 处理流程如图: 下面是根据该流程采用递归下降的方法识别变量说明的算法描述。当读入前导词var后, 再读入一个token字,表明它是变量名称,调用下面的varst处理一行变量说明,当处理完一 行(读入;)后,下一行可能仍是变量说明,也可能是begin开始的可执行程序部分,否则就是 出错。 void varst(char *token) /*处理变量说明,读入var后进入该过程*/ { while(1) {

文档评论(0)

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

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

1亿VIP精品文档

相关文档