●易翻译性: 源程序容易翻译成可执行的目标程序。易翻 译性与翻译器密切关联。 易于翻译的关键是结构的规范化。 易翻译性与可读性和可写性之间存在矛盾。 如LISP程序易于翻译,但可读性和可写性 较差。 COBOL语言程序的语义较为简单, 可读性和可写性较好,但由于存在数量庞大 的语句和声明,翻译极为困难
⚫ 易翻译性: – 源程序容易翻译成可执行的目标程序。易翻 译性与翻译器密切关联。 – 易于翻译的关键是结构的规范化。 – 易翻译性与可读性和可写性之间存在矛盾。 如LISP程序易于翻译,但可读性和可写性 较差。COBOL语言程序的语义较为简单, 可读性和可写性较好,但由于存在数量庞大 的语句和声明,翻译极为困难
●无二义性: 所谓二义性是指:相同的语法结构存在两种 或更多种理解。无二义性是每个程序语言设 计的中心问题。二义性问题通常不是出现在 单个的程序元素中,而是在不同结构的相互 作用下表现出来的。 例1:C语言中存在两种不同的条件形式: if(ConE)S if (ConE) SI else S2 每一条语句均清楚的解释了语义,不存在二 义性。但将两个语句组合为: if(ConEl) if(ConE2)SI else S2 此时,存在二义性
⚫ 无二义性: – 所谓二义性是指:相同的语法结构存在两种 或更多种理解。无二义性是每个程序语言设 计的中心问题。二义性问题通常不是出现在 单个的程序元素中,而是在不同结构的相互 作用下表现出来的。 – 例1:C语言中存在两种不同的条件形式: if (ConE) S if (ConE) S1 else S2 – 每一条语句均清楚的解释了语义,不存在二 义性。但将两个语句组合为: if (ConE1) if (ConE2) S1 else S2 此时,存在二义性
语句S2的执行控制存在不同的理解,是 ConE1为假时执行,还是ConE1为假时执行? 解决方法: 插入定界符,如 if(ConEl) if (ConEl) if(ConE2)S1;或 I if(ConE2)S: else S2: 3 else s2 ●二者语义中强制的选择一种作为合法的解 释,如就近匹配原则,即else与最近的if 匹配
– 语句S2的执行控制存在不同的理解,是 ConE1为假时执行,还是ConE1为假时执行? – 解决方法: ⚫ 插入定界符,如 if (ConE1) if (ConE1) { if (ConE2) S1; 或 { if (ConE2) S1}; else S2;} else S2; ⚫ 二者语义中强制的选择一种作为合法的解 释,如就近匹配原则,即else与最近的 if 匹配
例2: fortran语言中,函数调用和数组引用 语法是完全相同的。如语句 X=A( 存在二义性。此时A(i是函数A的调用?还是 数组A的引用? 解决方法:若没有数组A的声明,就默认为 是函数A的调用。 Asac和C语言中的解决方 案是:用表示数组,()表示函数,如 A[i理解为数组引用,A(i)解释为函数调 用 返回本节
– 例2:Fortran语言中,函数调用和数组引用 语法是完全相同的。如语句 x = A(i,j) 存在二义性。此时A(i,j)是函数A的调用?还是 数组A的引用? – 解决方法:若没有数组A的声明,就默认为 是函数A的调用。Pasacl和C语言中的解决方 案是:用[]表示数组,()表示函数,如 A[i,j]理解为数组引用,A(i,j)解释为函数调 用。 返回本节
语言的语法要素 选用不同的基本语法要素就形成了一种语言的 基本风格。下面,将简介一些语法要素。 ●字符集: 字符集的选择是语法设计的第一步。通常选 择的字符集是ASCI字符集。 目前,通常使用8为(一个Byte)来表示 个字符,这足够表示52个大小写字母、10个 数字、标点符号以及一些特殊字符。但如今 计算机工业越来越国际化,各个国家的文字 货币符号等已远远超过256。因此,考虑使 用16位表示字符集
语言的语法要素 ⚫ 选用不同的基本语法要素就形成了一种语言的 基本风格。下面,将简介一些语法要素。 ⚫ 字符集: – 字符集的选择是语法设计的第一步。通常选 择的字符集是ASCII字符集。 – 目前,通常使用8为(一个Byte)来表示一 个字符,这足够表示52个大小写字母、10个 数字、标点符号以及一些特殊字符。但如今, 计算机工业越来越国际化,各个国家的文字、 货币符号等已远远超过256。因此,考虑使 用16位表示字符集