高级语言及语言描述
1 程序语言的定义
1.1 语法
一个语言的语法是指这样的一组规则,用它可以形成和产生一个合式的程序。这些规则一部分称为词法规则,另一部分称为语法规则。
词法规则是指单词符号的形成规则。
语法规则是语法单位的形成规则。
1.2 语义
语义是指这样的一组规则,使用它可以定义一个程序的意义。这些规则称为语义规则。
2 高级语言的一般特性
2.1 高级语言的分类
编译时是否需要检查: 静态语言类型(c,c++,java)、动态类型语言(python,ruby,php)
类型检查强弱:弱类型、强类型
强制式语言、应用式语言、基于规则的语言、面向对象语言
2.2 程序结构
2.3 数据类型与操作
一、 数据类型
基本数据类型(int,char,float,double)
构造数据类型(指针,静态数组,动态数组)
自定义数据类型(栈,队列,字符串,结构体)
每种数据类型都隐含了数据对象可以具有的值和作用于这种类型数据对象的操作
二、 数据结构
a) 数组
特点:一个数组是由同一类型数据所组成的某种n维矩形结构。每个元素占相同的存储空间
b) 结构体类型、记录、类类型
c) 从逻辑上说,结构体类型和类类型是由已知类型的数据组合起来的一种结构。
3 程序语言的语法描述
3.1 上下文无关文法
它所定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境的。
特点:独立性
缺点:不能用来描述自然语言
a) 终结符号乃是组成语言的基本符号,即在程序语言中以前屡次提到的单词符号,如基本字,标识符,常数,算符和界符等.
b) 非终结符号(也称语法变量)用来代表语法范畴。
c) 开始符号是一个特殊的非终结符号,它代表所定义的语言中我们最感兴趣的语法范畴。
d) 产生式(也称为产生规则或简称规则)是定义语法范畴的一种书写规则。
形式上定义一个上下文无关文法G是一个四元式
(VT,VN,S,P)其中
VT是一个非空有限集,它的每一个元素称为终结符号;
VN是一个非空有限集,它的每一个元素称为非终结符号,
VT∩VN=f;
S是一个非终结符号,称为开始符号;
P是一个产生式(有限)集合,每个产生式形式是A→a ,其中,P∈VN, a∈(VT∪VN)*
开始符号S至少必须在某一产生式的左部出现一次。
文法G所产生的句子的全体是一个语言,将它记为L(G).
L(G)={a|S a & a∈VT* }
[题6]
[题7]
[题8 (1)]
3.2 语法分析树与二义性
语法分析树:用一张图表示一个句型的推导
文法二义性:如果一个文法存在某个句子对应两棵不同的语法树。也就是说,若一个文法中存在某个句子,他有两个不同的最左(最右)推导,则这个文法是二义的。
语言的二义性:文法的二义性和语言的二义性是两个不同的概念。
[题8 (2)]
[题9]
3.3 形式语言鸟瞰
0型文法:G=(VT ,VN ,S ,P) 是一个0型文法,如果它的每个产生式是这样的结构
且至少有一个非终结符,而。
0型文法也称短语文法
0型文法的描述能力相当于图灵机
该文法所描述的语言称为0型语言,或者称递归可枚举语言
1型文法:
产生式的形式为
其中|a|<=|b|, 除外,但S不得出现于任何产生式的右部
另一种定义形式:
该文法所描述的语言又称上下文有关语言
2型文法:
该文法的产生式满足:
A为非终结符,a为终结符和非终结符组成的符号串,可以是空串
该文法又称为上下文无关文法
该文法所描述的语言又称为上下文无关语言
3型文法:
该文法的产生式满足:
A为非终结符, a为终结符组成的符号串,可以是空串
该文法又称为右线性文法,或左线性文法,通称正规文法
该文法所描述的语言又称为正规语言(用来描述词法规则)
[题12]
章节学习感受:
编译原理的基础概念,上下文无关语法,语言的定义,产生式,4种形式语言的定义都很重要,这是学习的基础,混淆概念或者记忆不清都会造成不必要的麻烦,总之,要记清楚概念,不多做无用功。