图 3 3 编译过程
3.3.3 语义分析
A. 什么是语义分析
所谓语义分析,就是确定程序是否有意义的,分析程序的含义,并做出相应的处理。语义分析(Syntax analysis)是编译过程的一个逻辑阶段,在整个编译过程中处于第三阶段,语义分析就是语义信息的翻译与计算,而语义信息的翻译与计算与被翻译过程的最终含义或语义密切相关。使用语法制导翻译进行语义处理,而语法制导翻译方法,直观上说就是为每个产生式配上一个翻译子程序(语义动作或语义子程序),
并且在语法分析的同时执行这些子程序,语义动作是给产生式赋予具体意义的手段。
B. 为什么要语义分析阶段?
– 逻辑结构清楚;利于不同目标机上实现同一种语言;
– 利于进行与机器无关的优化,这些内部形式也能用于解释。
C. 语义分析任务
(1) 审查每个语法结构的静态语义,即验证语法结构合法的程序是否真正有意义,即审查类型并报告错误,包括:
类型检查: 运算数类型
一致性检查: 名字声明与引用
控制流检查: 转移目标
名字检查: 作用域
(2) 如果静态语义正确,根据语法结构分析其含义,并用某种机器内部表示形式表示出来,或者直接生成目标指令。简单地说,就是分析语法结构含义,表示成中间语言或生成目标指令。
D. 类型检查的分类和内容
(1) 类型检查可以分为动态和静态两种。
动态检查在运行时刻完成。功效很低。但是如果语言允许动态确定类型,动态检查是必须的。
静态检查在编译时刻完成。静态检查是高效的。
如果一个语言能够保证所有经过静态检查之后,程序没有运行时刻的类型错误,则称为强类型的。
(2) 类型检查的内容包括:
(a) 表达式的类型检查,主要的工作是检查参与运算的操作数是否可以进行相应操作。
(b) 语句的类型检查,要包括:赋值语句类型的相容性,控制表达式的结果类型检查。而在C语言中,赋值类型相容性在表达式部分处理。
(c) 函数的类型检查,简化了的函数调用语法为E::=E(E);类型检查所需要做的工作是:检查参数是否符合条件,并且确定函数结果的类型。
E::= E1(E2) {E.type = if E2.type=s and E1.type=s®t then t else type_error}
当函数有多个参数的时候,需要检查多个参数的类型。
实际的翻译方案还需要考虑类型的相容性问题。
3.4 程序设计知识背景
程序设计方法经历了过程化程序设计(procedural programming)、结构化程序设计(structured programming)、面向对象程序设计(object-oriented programming)几个阶段。过程化程序设计是在一个数据集合上进行的一系列操作;而结构化程序设计方法提供了系统的组织这些过程和能够处理大量数据的有效手段。
面向对象程序设计语言的特征表现在:
(1) 封装和数据隐藏
C++通过增加一种新的数据类型“类”定义对象来支持封装和数据隐藏。类作为一种类型,描述了众多对象共同的特性( 由数据和行为组成)。类作为一个封装实体,可以完整使用,其内部的成员可以被隐藏起来。
(2) 继承与重用
C++通过继承来支持重用并产生新的子类,称为派生类。
(3) 多态性
多态性是另一个与类层次有关的重要概念,即公共消息可以发送给父类对象和所有的子类对象。多态性允许每个子对象以适合自己的形式来响应消息,来支持“不同类型有各自的响应”的思想,以达到提高已有代码的可扩允性的目的。
Visual C++6.0概述:
Windows应用程序开发系统Visual C++6.0是Visual Studio98(Visual Studio 6.0)家族的成员之一,起源于Microsoft C/C++,是当前Windows 应用开发系统中与Windows平台本身最具有亲缘关系的开发平台。
Visual C++主要的特点是支持可视化编程和支持面向对象的编程技术,它提
供了大量的可视化编程的工具,如App Wizard和Calls Wizard等。此外可使用Actives技术,支持Internet编程,支持ODBC数据编程等。
基于以上特点,所以我选择Visual C++6.0 作为开发的工具。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页