高级语言及其语法描述
Part 1 概念明晰
讨论对象:高级语言
讨论内容:高级语言的一些定义、结构、和共同特征
程序语言定义——语法和语义
程序语言是一个记号系统,通过该系统中指定的一组符号进行组合来表达一些特定的含义,用于描述问题及解决方案。
一组符号进行组合:在这过组合的过程中所遵循的规则,便是语言的语法。
一些特定的含义:规定了语法成分的实际含义,就是语言的语义。
- 语法
首先,任何语言都是建立在一个特定的字符集之上的。(如英语的26个字母,中文的偏旁部首等等)。
但却不是任意的组合都能形式正确,例如 Giev I a book him.尽管是一个字符串排列,却不符合我们的想要的形式。因此我们需要将排列产生,由“giev”到“give”,由“Give I a book”到“I give him a book”这样的形式时,它会对应某种合乎要求形式正确(合式)的规则,这组规则就是该语言的语法。
因此, 程序语言的语法是由词法规则和语法规则两部分组成的。
词法规则是指单词符号的形成规则。单词符号的形成比较简单,通常由数个至数十个字符排列而成,少数单词符号直接由字母表中的单个字符构成。
注:单词符号是语言中具有独立意义的最基本结构。包括关键字、标识符、常数、运算符、界符(逗号、分号、括号等)。
语言的语法规则规定了如何从单词符号形成更大的结构(即语法单位),即语法规则是语法单位的形成规则。常见的语法单位有:表达式、语句、分程序、函数、过程和程序等。
-
语义
在有字母表、语法、词法规则之外,当然还必须规定出它的各个单词符号和语法单位的含义(如在英文中构词action、invention这些单词符号和句式if…else结构就要给出含义,否则没有含义也就无法对应使用),这便是要解决语义的问题。而语义仍然是一组规则,可以理解为定义意义的规则。(可以类比成英语里的构词法等)。很明显,这样一种解释是对语法单位的人为解释,对形式上相同的一个语法单位,在不同的语言中可能会有不同的解释,即语义不同。 -
理解程序结构
一个程序实质上是对某一问题(用数据表示)及处理这一问题的方法(体现为对数据的运算)作出的描述。对目前的许多程序语言,它的一个程序可以看成是一个层次结构:
高级语言的一般特性
要说高级语言的一般特性,也就是说当我们谈到高级语言时会涉及到一些什么要素。下面简要列出。
1.高级语言的分类
- 强制性语言
- 应用式语言
- 基于规则语言
- 面向对象语言
2.程序的结构
一般是由过程、函数等若干子程序段构成,有些还引入了程序包、类等更高级的结构
3.数据类型与操作
4.表达式:由运算量(操作数:变量,常量、数据引用、函数调用等等)和算符组成。
5.语句:可分为说明性语句,执行性语句
Part 2 程序语言的语法描述
直接走重要的部分。
上下文无关文法
文法是描述语言的语法结构的形式规则。如果一种文法所定义的语法范畴(或称语法单位)是完全独立于这种范畴可能出现的环境的,则称此文法为上下文无关文法。
- 例子引入
- 符号描述
VT 中的每一个符号称为终结符号,代表一个语言不可再分的基本符号。 在程序语言中指的是单词符号。
VN中的每一个符号称为非终结符号,也称语法变量,用来代表语法范畴。例如,“算术表达式”、“布尔表达式”、“赋值句”、“分程序”、“过程”等。
既然非终结符号用来代表语法范畴,它表示的是一个类记号的集合。也就是说非终结符号在文法中起到了延续扩展的作用,也就上面例子中语法范畴不断的被细化缩小。所以非终结符号是由终结符号、非终结符号组成的一个字符串。(有非终结符号就可以继续缩小语法范围,而这个缩小的终点就是达到只有终结符号的表达)
- 关于文法的确定描述
- 最左推导与最右推导
注意是选择非终结符号替换
例题理解(1)
解答:
- 语法分析树
(2)
- 关于二义性