编译原理课件第1章概述.pptVIP

  • 2
  • 0
  • 约6.55千字
  • 约 49页
  • 2018-04-29 发布于河南
  • 举报
编译原理课件第1章概述

编 译 原 理 课程内容 本节内容简介 关于编译程序的几点说明 (4)编译程序实际上只可能发现并报告在静态可计算性制约下的那些错误。 (5)理想的编译程序应该具有单独编译某个模块的能力,同时它不应因为源程序的一两处修改就对源程序重新编译。 所谓编译过程是指将高级语言程序翻译为等价的目标程序的过程。 翻译和编译工作的比较 例: 一个简要的C 程序 Main() /* used for illustrating compiling process */ { Int a,b,c,x; …… a=a+b*c+b*c; x=a*3-b*c; b=a+)b*(x- ; …… } 上述源程序通过词法分析识别出如下单词符号: 基本字:main, int 标识符:a,b,c,x 常数: 3 运算符:+,*,- 界符: ( , ) , ; , { , } , /* , */, = 长度上统一的标准形式——TOKEN串 TOKEN串是一个二元组:(单词类别,单词的值) 其中:“单词的类别”用既已存在的一组整数值(称为单词的种别 码)表示。用以区分不同种类的单词。 “单词的值”是单词的机内表示形式。一般是ASCII码。 通过语法分析,识别出: a,b,x 是变量这个语法单位; a+b*c+b*c组合成表达式这样的语法单位; 识别出说明语句,赋值语句这样的语法单位,并检查正确性。例如, 赋值语句由 变量=表达式构成; 这里发现赋值语句b=a+)b*(x-的语法错误。 原因是表达式 a+)b*(x-错误 具体说来语义分析包括两方面: (1)静态语义检查。要检查标识符是否被定义,前后的数据类型是否一致。如上述源程序中x=a*3-b*c,要查看赋值号左右的变量和表达式的类型是否一致。 (2)进行语义处理。针对不同类型的语句语义处理的方式不同。对说明语句,要将说明性语句中所定义的变量名字及其有关信息送进符号表,并为之分配存储单元;对可执行语句(如赋值语句、条件语句、循环语句等),就要生成可表达语义的中间代码。 分析到说明语句int a,b,c,x;后,应把变量a,b,c的类型int填入符号表中,分析到 } 后,将产生以下四元式序列: 运算符 左运算对象 右运算对象 工作单元 注释 (1) * b c T1 b*c?T1 (2) + a T1 T2 a+T1?T2 (3) * b c T3 b*c?T3 (4) + T2 T3 T4 a+b*c+b*c?T4 (5) = T4 _ a T4?a (6) * a 3 T5 a*3?T5 (7) * b c T6 b*c?T6 (8) _ T5 T6 T7 a*3-b*c?T7 (9) = T7 _ x T7?x 语义翻译工作通常穿插在语法分析过程当中,因而语义翻译程序是由一组语法子程序构成的。 上述四元式经优化得: (1)(*,b, c, T1) (2)(+, a, T1,T2) (3)(+, T1,T2,T4) (4)(=,T4,_, a ) (5)(*, a, 3, T5) (6)(_, T5,T1,T7) (7)(=,T7,_, x ) 编译程序所产生的目标代码质量的高低,主要取决于这一阶段里代码优化程序功能的强弱。 多遍扫描的编译程序 例如,可以把词法分析作为第一遍;语法分析和语义分析作为第二遍;代码优化和存储分配作为第三遍;代码生成作为第四遍:从而构成一个四遍扫描的编译程序。 每遍完成上述某个阶段的一部分、全部或几个阶段的工作,并将结构存入外存储器里,作为下一遍的输入。 那么一个编译程序究竟应分成几遍,这和源程序语言的结构与目标机器的特征有关。 分多遍完成编译过程的优点:可以使整个编译程序的逻辑结构更清晰,能减少对主存容量的要求,使优化工作更为充分,并为可移植创造条件。缺点:遍数多势必增加读写中间文件的次数,从而消耗过多的时间

文档评论(0)

1亿VIP精品文档

相关文档