一个简单的语法制导翻译器.ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 一个简单的语法制导翻译器 optexpr ? ε | expr void optexpr () { if( lookahead == expr ) match ( expr ); } void match (terminal t ) { if( lookahead == t ) lookahead = nextTerminal; else report (“ syntax error ”); } 第二章 一个简单的语法制导翻译器 optexpr ? ε | expr void optexpr () { if(lookahead == expr ) match ( expr ); } void match (terminal t ) { if( lookahead == t ) lookahead = nextTerminal; else report (“ syntax error ”); } 何时使用 ε 产生式 输入: for ( ; expr ; expr ) other 第二章 一个简单的语法制导翻译器 ? 设计一个预测分析器 ? 对应于非终结符 A : ? 检查向前看符号,决定使用 A 的哪个产生式。如果 一个产生式的体为 α(α 不是空串 ε ) ,且向前看符号在 FIRST(α) 中,那么就选择这个产生式。 ? 然后,模拟被选中的产生式的体,也就是,从左向 右逐个执行此产生式体的符号。“执行”就是调用 相应非终结符的过程。 ? 嵌入翻译方案 ? 翻译动作作为一个非终结符 第二章 一个简单的语法制导翻译器 ? 语法分析 ? 左递归 ? 可能使递归下降语法分析器进入无限循环 例: expr ? expr + term | term expr expr expr expr term term term … … 第二章 一个简单的语法制导翻译器 ? 语法分析 ? 消除左递归 A ? A α | β A ? β R R ? α R | ε A A A A β α α … α … β α α … α ? A R R R R .,. 左递归 A ? A α | β A ? β R R ? α R | ε ? 消除左递归,并构建语法树 ? 9-5+2 ? expr ? expr + term | term ? expr ? expr - term | term 第 3,4 次课 一个简单的语法制导翻译器 2.3~2.5 中缀表达式转后缀表达式 ? 本次课主要内容都是基于如何将中缀表达 式转换为后缀表达式 9 – 5 + 2 - 95-2+ 2.3 语法制导翻译的定义 第二章 一个简单的语法制导翻译器 ? 语法制导翻译:对语法树进行 语义分析 ? 例如:将中缀表达式转化成为后缀 ? 9 - 5 + 2 ? 9 5 – 2 + ? ? list list list digit 9 digit digit - 5 + 2 第二章 一个简单的语法制导翻译器 ? 语法制导翻译:对语法树进行 语义分析 ? 语法制导定义 ? 语法制导翻译方案 第二章 一个简单的语法制导翻译器 ? 语法制导翻译 ? 语法制导定义 (syntax-directed definition) ? 每个文法符号和一个属 性集合相关联 ? 例树中 ”.t” 是属性 ? 每个产生式和一组语义 规则相关联 expr.t = 95-2+ expr.t = 95- expr.t = 9 term.t = 9 9 term.t = 5 5 - + term.t = 2 2 产生式 语义规则 expr ? expr 1 + term expr.t = expr 1 .t || term.t || ‘+ expr ? expr 1 - term expr.t = expr 1 .t || term.t || ‘ - expr ? term expr.t = term.t term ? 0 term.t = ‘0 term ? 1 term.t = ‘1 … … term ? 9 term.t = ‘9 例子: 9-5+2 第二章 一个简单的语法制导翻译器 ? 语法制导翻译 ? 属性 ? 综合属性 ? 如果某个属性在语法分析树节点 N 上的值由 N 的子节点和 N 本身的属性值确定,则该属性为综合属性 ? 继承属性 ? 如果某个属性由语法分析树中该节点本身、父节点以及兄 弟节点上的属性值决定,则该属性为继承属性 第二章 一个简单的语法制导翻译器 ? 后缀表达式( postfix notation ): E ? 如何 E 是一个变量或

文档评论(0)

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

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

1亿VIP精品文档

相关文档