第一章编译简介(编辑修改稿)内容摘要:

(Semantic analysis) 2020/6/28 25 语义分析 (Semantic analysis) 2020/6/28 26 语义分析 (Semantic analysis) • 对语法分析树或其他内部中间表示进行静态语义检查,并生成目标代码或中间代码。 – 确定类型 – 类型检查 – 识别含义与相应的语义处理 – 其它静态语义检查 • 为了优化,往往先生成内部中间表示代码:如逆波兰表示、三元式序列、四元式序列,或者抽象语法树。 2020/6/28 27 语义分析 • 错在哪里。 – 例 1: int arr[2], c。 c = arr1 * 10。 – 例 2: Program p(input,output)。 Var rate: real。 procedure initial。 … position := initial + rate*60 2020/6/28 28 Semantic analysis inserts a conversion from integer to real. := position + * rate 60 initial inttoreal 插入语义处理结点的语法树 2020/6/28 29 The phases of a piler Source Program Lexical Analyzer Syntax Analyzer Semantic Analyzer Intermediate Code Generator Code Optimizer Code Generator Target Program Symboltable Manager Error Handler 2020/6/28 30 编译程序的结构框图 词法分析器 语法分析器 语义分析器 源程序 中间代码生成器 代码优化器 代码生成器 目标程序 出错管理器 符号表管理器 2020/6/28 31 符 号 表 position initial rate . . . . . . . . . 1 2 3 词法分析器 id1 := id2 + id3 * 60 position := initial + rate * 60 lexical analyzer 2020/6/28 32 符 号 表 position initial rate . . . . . . . . . 1 2 3 语法分析器 id1 := id2 + id3 * 60 := + * 60 id1 id2 id3 Syntax Analyzer 2020/6/28 33 符 号 表 position initial rate . . . . . . . . . 1 2 3 语义分析器 := + * 60 id1 id2 id3 := + * 60 id1 id2 id3 inttoreal Semantic Analyzer 2020/6/28 34 符 号 表 position initial rate . . . . . . . . . 1 2 3 中间代码生成器 temp1 := inttoreal(60) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3 := + * 60 id1 id2 id3 inttoreal Intermediate Code Generator 2020/6/28 35 符 号 表 position initial rate . . . . . . . . . 1 2 3 代码优化器 temp1 := inttoreal(60) te。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。