编译原理第二章

这一章主要学习了程序语言的定义,高级语言的特性,程序语法的描述。

任何语言实现的基础是语言的定义。在定义方面,编译程序研制者与一般用户有所不同,用户关心语言如何使用,开发人员关心文法的定义。他们对哪些构造允许出现更感兴趣。

程序语言主要由语法和语义两方面定义。语法包括字母表单词符号语法单位字母表是一个有限的字符集,包含大小写英文字母,数字,特殊字符。C/C++字符集标准的256个,常用的128个,二进制8位,Java字符集2^16个,二进制16位。单词符号是语言中具有独立意义的最基本结构,一般包括:常数,标识符,基本字、算符和界符。语法单位是由单词符号构成的更大的结构。语法包括词法规则,语法规则。

高级语言可以通过他们各自的特点进行分类。面向对象语言的特性:封装性:类和对象,继承性:子类,多态性:操作符或子程序名能够根据参数和结果的数据类型,引用某些函数定义中的任意一个。

程序设计范型:强制式语言(过程式语言:c

应用式语言(函数式语言:lisp

基于规则的语言(prolog,yacc

面向对象的语言(java)

编译时是否需要类型检查:

  静态类型语言(c,c++,java)

动态类型语言(Python, Ruby,PHP)

类型检查强弱:

弱类型语言(C,C++VB)

强类型语言(JAVAC#)

高级语言的表达式:常见的算术表示形式:前缀式: +a*bc 中缀式:a+b*c 后缀式:abc*+,接下来是与问法相关的几个概念和术语:

上下文无关文法的特点:它所定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境的。

特点:独立性

缺点:不能用来描述自然语言

一个上下文无关文法G包括四个组成部分:一组终结符号,一组非终结符,一个开始符号,以及一组产生式。

形式上定义一个上下文无关文法G是一个四元式(VT,VN,S,P

最左(最右)推导:在推导的任何一步αÞβ,其中α、β是句型,都是对α中的最左(右)非终结符进行替换

0型文法

G=(VT ,VN ,S ,P) 是一个0型文法,如果它的每个产生式是这样的结构  a®baÎ(VNÈVT)* 且至少有一个非终结符,而bÎ(VNÈVT)*

0型文法也称短语文法

0型文法的描述能力相当于图灵机

该文法所描述的语言称为0型语言,或者称递归可枚举语言

1型文法:

产生式的形式为α→β

其中|β|>=|α|, S∈ε 除外,但S不得出现于任何产生式的右部

1型文法又称为上下文无关文法

另一种定义形式:α1Aα2→α1βα2

该文法所描述的语言又称上下文有关语言

2型文法:

该文法的产生式满足:A→α

A为非终结符,α为终结符和非终结符组成的符号串,可以是空串

该文法又称为上下文无关文法

该文法所描述的语言又称为上下文无关语言

3型文法:

该文法的产生式满足:

A→αB ABα

A为非终结符, α为终结符组成的符号串,可以是空串

该文法又称为右线性文法,或左线性文法,通称正规文法

该文法所描述的语言又称为正规语言(用来描述词法规则)


感受:

  第二章的学习让我明显感觉到这些是极其抽象的内容,也让我了解到了高级语言是如何定义的,了解到了0.1.2.3型文法。编译原理所做的就是将语言转换成可以通过规则解析出来的句子,因此这一章的内容是学习该门课程的必要条件。虽然抽象,但是我会进行思考学习。


猜你喜欢

转载自blog.csdn.net/qq_35482060/article/details/79683975