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

编译原理yacclex实例分析.ppt

  1. 1、本文档共47页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理yacc

PL/0编译程序实现的简要回顾 步骤1、 认识源语言PL/0与目标代码pcode及它们之间的映射 步骤2、 PL/0编译程序的总体设计 步骤3、 PL/0编译程序词法分析的设计与实现 步骤4、 PL/0编译程序语法语义分析的设计与实现 步骤5、 PL/0编译程序代码生成的实现 步骤6、 PL/0编译程序语法错误处理的实现 步骤7、 pcode代码解释器的设计与实现 PL/0语言:PASCAL语言的子集,功能简单,结构清晰,可读性强,具备了一般高级语言的必备部分 PL/0程序示例 PL/0的非形式描述 PL/0的语法描述图 PL/0语言文法的EBNF表示 目标代码pcode是一种假想栈式计算机的汇编语言。 自顶向下的语法分析 VAR A; BEGIN READ(A) END. 自底向上的语法分析 VAR A; BEGIN READ(A) END. YACCLEX介绍及实例分析 清华大学计算机系软件研究所 赖辉旻 简要介绍 Yacc ( Yet Another Compiler-Compiler ) 基于LALR(1)的语法分析程序的生成器 Lex (A Lexical Analyzer Generator) 词法分析程序的生成器,其输入是描述三型语言的正规式,输出是一个相应正规表达式的词法分析程序。 Lex文件格式 Lex文件格式中应注意的问题 Yacc文件格式 Yacc文件格式中应注意的问题 一、TOKEN的定义 %token NUM %token id IDENT 二、语法规则与语义动作 Yacc文件格式中的关键问题 四、算符的优先级与结合率 %left - +’ %left * /’ %left NEG /* negation--unary minus */ %right ^ /* exponentiation */ 五、二义性及移进/规约冲突 六、出错处理 Yacc生成的语法分析器的工作原理 Yacc生成的语法分析器由一个带栈的有穷自动机组成。 此状态机只有四种动作:移进(shift)、规约(reduce)、接受(accept)和错误(error) SSPL0编译程序的实现 SSPL0的编译、解释实现 明确SSPL0的EBNF 将SSPL0的EBNF转换为YACC接受的语法格式 写出接受SSPL0语法的LEX、YACC程序 在LEX、YACC程序加入相应语义动作 生成相应.c、.h文件并用VC编译链接生成SSPL0的编译器/解释器 测试SSPL0编译器的示例 明确SSPL0的EBNF SSPL0的一个示例: var a,b,cc begin read(a) write(b) end. SSPL0的直观描述 明确SSPL0的EBNF 程序∷=分程序. 分程序∷=变量说明部分复合语句 变量说明部分∷=VAR标识符{,标识符} 复合语句∷=BEGIN语句{语句}END 语句∷=读语句|写语句 读语句∷=READ(标识符{,标识符}) 写语句∷=WRITE(标识符{,标识符}) 将SSPL0的EBNF转换为YACC接受的语法格式 prog : block POINT ; block : varstat compoundstat ; varstat : VAR varlist ; varlist : IDENT | varlist COMMA IDENT ; compoundstat : BEGIN statements END ; statements : stat | statements stat ; stat : readstat | writestat ; readstat : READ LPAREN readvars RPAREN ; readvars : IDENT | readvars COMMA IDENT ; writestat:WRITE LPAREN writevars RPAREN; writevars : IDENT | writevars COMMA IDENT ; 将SSPL0的EBNF转换为YACC接受的语法格式 此例的转换应注意两点: 形如 标识符{,标识符} 应转换为左递归语法定义: readvars : IDENT | readvars COMMA IDENT ; 要将多种语句中的标识符{,标识符}定义为不同的形式: varlist, readvars, writevars, 因为以后它们的语义处理是不同的。 写出接受SSPL0语法的LEX、YACC程序 LEX程序应能识别前面

文档评论(0)

zhuliyan1314 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档