第三章 语言翻铎
第三章 语 言 翻 译
31语言的语法 语法:单词作为语句中元素的显示它们之间关系的布局。描述 了构成有效程序的符号序列。如C中,x=y+z是有效的符号序列, 而x+-则不是。 语法提供了理解程序需要的有意义的信息。也提供了大量源程 序到目标程序翻译所需的信息。 单靠语法并不足以无二义地刻划语句的结构。如: x-245+367,语法并不能告诉我们x是否被声明或是否声明为 实数。ⅹ=56或6.12均是可能的。 因此,对语言的完整描述单靠语法结构是不够的,还需涉及语 义。如:声明的使用、操作、顺序控制和引用环境等影响变量, 并不总是由语法决定。 虽然如此,语法仍是语言描述中的重要属性。 现在,语法描述已是一个解决了的问题,源程序的语法理解阶 段是相当机械的,YACC等工具可自动生成给定程序的语法描 述
3.1 语言的语法 •语法:单词作为语句中元素的显示它们之间关系的布局。描述 了构成有效程序的符号序列。如C中,x=y+z是有效的符号序列, 而xy+-则不是。 •语法提供了理解程序需要的有意义的信息。也提供了大量源程 序到目标程序翻译所需的信息。 •单 靠 语 法 并 不 足 以 无 二 义 地 刻 划 语 句 的 结 构 。 如 : x=2.45+3.67,语法并不能告诉我们x是否被声明或是否声明为 实数。x=5,6或6.12均是可能的。 •因此,对语言的完整描述单靠语法结构是不够的,还需涉及语 义。如:声明的使用、操作、顺序控制和引用环境等影响变量, 并不总是由语法决定。 •虽然如此,语法仍是语言描述中的重要属性。 •现在,语法描述已是一个解决了的问题,源程序的语法理解阶 段是相当机械的,YACC等工具可自动生成给定程序的语法描 述
般语法准则 语法的主要目的是为程序员和语言处理器间通讯提供一套 注记方法。而特殊语法结构的选择被限制于特殊的信息项 通讯 例如:某特定变量有类型实数,可以用多种方式表达。 可以是显示声明或隐含的命名约定,等。 语法细节的选择大部分是基于第二准则,如可读性,它和 通讯的主要目标无关。 有很多二级准则,通常可按其目标分类,分为:易读、易 写、易翻译、无二义等目标。这些目标间有时会有冲突
一般语法准则 •语法的主要目的是为程序员和语言处理器间通讯提供一套 注记方法。而特殊语法结构的选择被限制于特殊的信息项 通讯。 例如:某特定变量有类型实数,可以用多种方式表达。 可以是显示声明或隐含的命名约定,等。 •语法细节的选择大部分是基于第二准则,如可读性,它和 通讯的主要目标无关。 •有很多二级准则,通常可按其目标分类,分为:易读、易 写、易翻译、无二义等目标。这些目标间有时会有冲突
易读性( Readability 程序是易读的,如果程序表示的算法和数据的结构可从程 序文本的检査明显了解。一个易读的程序,通常称为自文 档的(不需其他用于理解的辅助文档)。 增加易读性的方式:自然的语句格式、结构化语句、关键 字和噪音字的自由使用、嵌入式注释机制、不限长标识符, 记忆操作符、自由域格式、完全的数据声明等。 易读性并不能由语言设计保证,最好的设计也可能由于糟 糕的编程而破坏。当然,语法设计也可能使最有意识的程 序员写出难理解的程序,如APL。 COBOL强调易读,但其 代价是牺牲了易写和易翻译, 增加易读性一语法不同应反映语义不同,做相似事的程序 结构是相似的。做不同事的程序其结构需有明显不同。语 如只提供了少数不同语法结构,通常导致程序易读性差。 如APL, SNOBOL4等,只提供一种语句格式,赋值、子程 序调用、简单GOTO、子程序返回,多路条件分支、及其它 常见程序结构的差异只能通过个别操作子的不同来反应
•易读性(Readabitity) 程序是易读的,如果程序表示的算法和数据的结构可从程 序文本的检查明显了解。一个易读的程序,通常称为自文 档的(不需其他用于理解的辅助文档)。 增加易读性的方式:自然的语句格式、结构化语句、关键 字和噪音字的自由使用、嵌入式注释机制、不限长标识符, 记忆操作符、自由域格式、完全的数据声明等。 易读性并不能由语言设计保证,最好的设计也可能由于糟 糕的编程而破坏。当然,语法设计也可能使最有意识的程 序员写出难理解的程序,如APL。COBOL强调易读,但其 代价是牺牲了易写和易翻译。 增加易读性—语法不同应反映语义不同,做相似事的程序 结构是相似的。做不同事的程序其结构需有明显不同。语 言如只提供了少数不同语法结构,通常导致程序易读性差。 如APL,SNOBOL4等,只提供一种语句格式,赋值、子程 序调用、简单GOTO、子程序返回,多路条件分支、及其它 常见程序结构的差异只能通过个别操作子的不同来反应
易写性 易写性(使用简明的、规则的语法结构)通常和易读性(冗 余结构是有帮助的)相冲突。 隐含的语法约定允许声明和操作不需刻划,从而使程序更短 更易写,但不易读。其他特性对两个目标均有增强:如结构 化语句、简单自然语句格式、记忆操作符、未限制标记符等 通常使程序易写,通过允许在程序中直接表示问题的算法和 数据的自然结构 语法称为冗余的,如果以多种方式传达同样的信息。有些冗 余性有用的,因它允许程序易读,并允许翻译时错误检测 缺点是不易写 大多数缺省规则(针对语言结构含义)试图减少冗余,通过 删去某些显式的含义陈述,因为这些含义可从语境中导出。 例, Fortran中约定,ⅠN打头的变量为整型,其他为实数, 这样不需声明,但缺点是有副作用,如:拼写错误不能被编 译器检测到,例如: INDEX被写成ⅠNDX→则变成新变量
•易写性 易写性(使用简明的、规则的语法结构)通常和易读性(冗 余结构是有帮助的)相冲突。 隐含的语法约定允许声明和操作不需刻划,从而使程序更短、 更易写,但不易读。其他特性对两个目标均有增强:如结构 化语句、简单自然语句格式、记忆操作符、未限制标记符等 通常使程序易写,通过允许在程序中直接表示问题的算法和 数据的自然结构。 语法称为冗余的,如果以多种方式传达同样的信息。有些冗 余性有用的,因它允许程序易读,并允许翻译时错误检测。 缺点是不易写。 大多数缺省规则(针对语言结构含义)试图减少冗余,通过 删去某些显式的含义陈述,因为这些含义可从语境中导出。 例,Fortran中约定,I-N打头的变量为整型,其他为实数, 这样不需声明,但缺点是有副作用,如:拼写错误不能被编 译器检测到,例如:INDEX被写成INDX→则变成新变量