大佬传送门:https://blog.csdn.net/qq_42322103/article/details/104451674
与机器语言或汇编语言比较,高级语言的优点
- 易于理解
- 易于维护
- 编写效率高
- 易于移植
1. 程序语言定义(掌握)
程序语言由两方面定义:语法、语义。
1.1 语法
-
定义:一组规则,用它可以形成和产生一个合式 (well-formed(结构合理的)) 的程序。
-
词法规则:单词符号的形成规则。
- 单词符号是语言中具有独立意义的最基本结构
- 一般包括:常数、标识符、基本字、算符、界符等。
- 描述工具:有限自动机
-
语法规则:语法单位的形成规则。
- 语法单位通常包括:表达式、语句、分程序、过程、函 数、程序等 。
- 描述工具:上下文无关文法
-
语言的词法规则和语法规则定义了程序的形式结构。
1.2 语义
- 定义:一组规则,用它可以定义一个程序的意义。
1.3 关于程序
-
程序:本质上说是描述一定数据的处理过程。
-
程序语言的基本功能:描述数据和对数据的运算。
2. 高级语言的一般特性
2.1 高级语言的分类(了解)
- 强制式语言、过程式语言:必须把解答问题的过程清晰地描述出来。
- 应用式语言:注重程序所表示的功能,将问题的结构描述出来,尤其是递归结构。
- 基于规则的语言:检查一定的条件,当它满足值,则执行适当的动作。
- 面向对象语言:封装性、继承性和多态性。
2.2 程序结构(了解)
- 如FORTRAN语言,非嵌套、非递归结构。
- 如PASCAL语言,可以嵌套和递归,允许动态申请和释放内存。
- 如ADA语言,一个程序包分为两部分,可见的规范说明部分,它定义了程序包外面可以访问的对象,程序包体部分,它实际定义程序包的实现细节。封装。
- 如JAVA语言,面向对象的高级语言,注意ADA语言不能称为面向对象语言是因为ADA语言不支持多态等。
- 作用域:一个名字能被使用的区域范围称作这个名字的作用域。
- 名字作用域规则—— " 最近嵌套原则 "
2.3 数据类型与操作(掌握)
-
一个数据类型通常包括三种要素
- 用于区别这种类型数据对象的属性。
- 这种类型的数据对象可以具有的值。
- 可以作用于这种类型的数据对象的操作。
-
初等数据类型
- 数值类型
- 逻辑类型
- 字符类型
- 指针类型
-
标识符与名字
-
标识符:以字母开头的,由字母数字组成的字符串。
-
标识符与名字两者有本质区别
-
标识符是语法概念。
-
名字有确切的意义和属性。
-
-
名字
- 值:单元中的内容
- 属性:类型和作用域
-
数组
-
其他数据类型
-
字符串:符号处理、公式处理
-
表格:本质上是一种记录结构
-
线性表:一组顺序化的记录结构
-
栈:一种线性表,后进先出, POP, PUSH
-
-
抽象数据类型
2.4 语句与控制结构(掌握)
- 表达式
表达式由运算量(也称操作数,即数据引用或函数调用)和算符(操作符)组成。 - 算符的优先次序
如对于A+B+C,在计算机上先算A+B和先算B+C结果可能不同。 - 语句
- 赋值语句
- A = B
- 名字左值(如A):该名字代表的那个单元 ( 地址 ) 称为该名字的左值 ( 所代表的存贮单元的地址 )。
- 右值(如B):一个名字的值称为该名字的右值 ( 所代表的存贮单元的内容 )。
- 例题:a+5是计算一个值,在编译实现时会存储在一个临时单元中,但是程序员并不能引用这个单元,所以a+5只有右值不具有左值。
- 控制语句
- 无条件转移语句:goto
- 条件语句 if
- 循环语句 for
- 过程调用语句 call
- 返回语句 return
- 说明语句
定义各种不同数据类型的变量或运算,定义名字的性质。 - 简单句和复合句
- 简单句
不包含其他语句成分的基本句。 - 复合句
局中有句的语句。
- 简单句
- 赋值语句
3. 程序语言的语法描述
几个概念
-
考虑一个有穷字母表字符集 ∑ ∑ ∑
-
其中每一个元素称为一个字符
-
∑ ∑ ∑上的字 ( 也叫字符串 ) 是指由 ∑ ∑ ∑ 中的字符所构成的 一个有穷序列
-
不包含任何字符的序列称为空字,记为 ε ε ε
-
用 ∑ ∗ ∑ * ∑∗ 表示∑上的所有字的全体,包含空字 ε ε ε
-
例如 : 设 ∑ ∑ ∑ = { a , b a , b a,b } ,则
∑ ∗ ∑* ∑∗ = { ε , a , b , a a , a b , b a , b b , a a a , . . . ε,a,b,aa,ab,ba,bb,aaa,... ε,a,b,aa,ab,ba,bb,aaa,... }
注意:如果V中没有空字,那么V的正规闭包比闭包少一个空字,如果V中本来有空字,那么两者没区别。
3.1 上下文无关文法(重点)
文法:描述语言的语法结构的形式规则。
产生式(也称产生规则或简称规则):是定义语法范畴的一种书写规则。
终结符:是组成语言的基本符号,是一个语言的不可再分的基本符号,对于上下文无关文法来说只出现在产生式右部。
非终结符:代表了语法范畴,我理解为可以再分的元素。注意范畴不是“范围”,例如,“算术表达式”、“布尔表达式”、“賦值句”、“分程序”、“过程”等,它们都是现今程序语言常见的语法范畴。注意:上下文无关文法产生式左边只能有一个非终结符。
由文法产生语言句子的基本思想是: 从识别符号开始,把当前产生的符号串中的非终结符号替换为相应规则右部的符号串,直到最终全由终结符号组成。这种替换过程称为推导或产生句子的过程,每一步成为直接推导或直接产生。
直接推出
推导
一般化
句型、句子、语言
两个例子
注意G(S)代表一个文法G,开始符号是S,而L(G)代表文法G所产生的语言。
逆推,这个例子与上个例子的不同是ab的次数是相同的,所以不能像上例一样分开写。
这个例子主要是m有范围是[n,2n],所以还是不能分开,只能像上例一样ab组合一起。
最左推导、最右推导
3.2 语法分析树和二义性(重点)
语法树的构造是从文法的开始符号出发,构造一个推导的过程,因为文法的每一个句型(句子)都存在一个推导,所以对应文法中任一句型的推导序列,总能构造一棵语法树。
一棵语法树表示一个句型的种种可能的(但未必是所有的)不同推导过程。
但是一个句型未必只对应一颗语法树。
对于算术表达式,虽然上面这个文法是二义的,但是下面这个文法确是无二义的,说明算术表达式是无二义的,这是符合常识的,只是上面这个文法有问题。
只要满足这两个式子,说明这个P一定会出现在某个句子的推导中,那么它就是有用的。
3.3 形式语言鸟瞰(了解)
注意:2型文法左边只能有一个非终结符。
我的思考:
可以试着构建G(S):
S → \rightarrow → c | aSa | bSb | aSb | bSa
但是你会发现这个文法所产生的语言包含的句子远多于题目要求的,所以不正确,0型文法怎么写暂时没想到。
转载:https://blog.csdn.net/weixin_43820118/article/details/113995078