- 1、本文档共47页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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程序应能识别前面
您可能关注的文档
最近下载
- 《中国民航发展史》课件——1-2 近代中国航空的开展.pptx VIP
- 第2节_电生磁-教学课件.pptx VIP
- 上访事件应急处置方案.docx VIP
- 《中国民航发展史》课件——第六章 中国民航体制改革的继续深化与.pptx VIP
- 《核电子学》习题解答.docx
- 《中国民航发展史》课件——第三章 新中国民用航空事业的创立与初步发展.pptx VIP
- 《中国民航发展史》课件——第二章 第二次世界大战后快速崛起的中国民用航空.pptx VIP
- 心流体验之如何进入最佳心理状态的课件.pptx
- 牙科椅的使用注意事项和维护保养.pptx
- 《中国民航发展史》课件——第一章 中国民用航空的萌芽与初步发展.pptx VIP
文档评论(0)