语言编译器的实现二.pptVIP

  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文档。上传文档
查看更多
语言编译器的实现二

主要内容 YACC的使用方法 PP2实验要求 第1页/共16页 YACC的使用方法 概述 YACC源程序的结构 YACC源程序的写法 第2页/共16页 YACC概述 YACC--A Compiler Compiler LEX源程序 YACC源程序 LEX YACC 词法分析程序yylex() 语法分析程序yyparse() 输入串 单词符号串 语法分析的输出 第3页/共16页 YACC源程序的结构 说明部分 %% 语法规则部分 %% 程序段部分 第4页/共16页 说明部分的写法 说明部分的内容如下: %{ 头文件 宏定义 数据类型定义 全局变量定义 %} 语法开始符定义 语义值类型定义 终结符定义 运算符优先级及结合性定义 第5页/共16页 语法开始符号的定义 %start 非终结符 注:若没有上述说明,YACC自动将第一条语法规则左部的非终结符作为语法开 始符。 语义值类型的定义 %union定义语义值的类型; %type定义文法符号的语义值类型; %token在定义终结符号时也可以定义语义值类型。 %union { int ival; double dval; } %type ival iexp %token dval CONST // %token CONST // %type dval CONST 第6页/共16页 终结符的定义 %token 语义值类型 终结符名 编号 %token DIGIT LETTER %token BEGIN 100 注:1.非终结符不需要特别说明,如果需要说明语义值类型则用%type语句; 2.文字字符终结符不需要特别说明,它们的编号取其在字符集中的值; 3.在规则中出现文字字符时用单引号括起来。 运算符优先级和结合性的定义 以%left和%right定义结合性; 以排列顺序定义优先级; 在语法规则中,以%prec辅助定义优先级 %left ‘+’ ‘-’ expr:expr ‘-’ expr %left ‘*’’/’ | expr ‘*’ expr %% | expr ‘/’ expr expr:expr ‘+’expr; | NAME; 第7页/共16页 语法规则部分的写法 语法规则的书写格式 左部(非终结符):右部(文法符号串);stat: /*empty*/; 可以把左部相同的规则集中在一起书写; 语义动作 YACC在进行归约前,先完成用户提供的语义动作; 语义动作要符合C语言文法; 使用以$开头的伪变量存取语义值。 expr:’(’expr’)’ {$$ = $2}; 第8页/共16页 解决二义性和冲突的方法 消除二义性的两条规则: 1.出现移进/归约冲突时,进行移进; 2.出现归约/归约冲突时,用先出现的规则进行归约; stat : IF bexp THEN stat | IF bexp THEN stat ELSE stat ; 用结合性和优先级解决冲突; 规则的结合性就是规则右部最后一个非终结符的优先级和结合性; 如果使用了%prec子句,则优先级和结合性由%prec子句决定; 对于无优先级和结合性的规则,用规则1、2解决; 对于有优先级和结合行的规则,用如下的规则解决:出现移进/归约冲突时,输入符号的优先级大于规则的优先级则移进,若输入符号的优先级小于规则的优先级则归约,若二者的优先级相同,左结合则归约,右结合则移进,无结合则出错。 第9页/共16页 错误处理 遇到错误就终止语法分析; 遇到错误继续进行分析,为此YACC提供了一个保留 的终结符error: 把error写在规则的右部,跳过出错的部分,继续分析; stat: error ; error后跟一个符号,跳过输入串,直到指定符号出现再继续分析。 stat: error ’;’ ; 第10页/共16页 程序段部分的写法 主程序main() 用户在其中调用语法分析程序yyparse()。 错误信息报告程序yyerror() YACC库提供了一个简单的报错程序。 词法分析程序yylex() 一般是用LEX提供的yylex()程序。 其它程序段 第11页/共16页 PP2:语法分析器的实现 实验目的:用bison工具生成一个语法分析器,对词法分析输出的单词符号串进行分析,并依次输出归约时所用的各条规则。 实验环境:Windows操作系统,VC 6.0,语法分析程序生成工具bison。 scanner.h 词法分析程序的头文件 不需要改动 scanner.l

文档评论(0)

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

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

1亿VIP精品文档

相关文档