第二章 高级语言及其语法描述

大佬传送门

与机器语言或汇编语言比较,高级语言的优点

  • 易于理解
  • 易于维护
  • 编写效率高
  • 易于移植

1. 程序语言定义(掌握)

在这里插入图片描述
程序语言由两方面定义:语法、语义

1.1 语法

  • 定义:一组规则,用它可以形成和产生一个合式 (well-formed(结构合理的)) 的程序。

  • 词法规则:单词符号的形成规则。

    • 单词符号是语言中具有独立意义的最基本结构
    • 一般包括:常数、标识符、基本字、算符、界符等。
    • 描述工具:有限自动机
  • 语法规则:语法单位的形成规则。

    • 语法单位通常包括:表达式、语句、分程序、过程、函 数、程序等 。
    • 描述工具:上下文无关文法
  • 语言的词法规则和语法规则定义了程序的形式结构。

1.2 语义

  • 定义:一组规则,用它可以定义一个程序的意义

1.3 关于程序

  • 程序:本质上说是描述一定数据的处理过程。

  • 程序语言的基本功能:描述数据和对数据的运算。


2. 高级语言的一般特性

2.1 高级语言的分类(了解)

  1. 强制式语言、过程式语言:必须把解答问题的过程清晰地描述出来。
  2. 应用式语言:注重程序所表示的功能,将问题的结构描述出来,尤其是递归结构。
  3. 基于规则的语言:检查一定的条件,当它满足值,则执行适当的动作。
  4. 面向对象语言:封装性、继承性和多态性。

2.2 程序结构(了解)

  1. 如FORTRAN语言,非嵌套、非递归结构
  2. 如PASCAL语言,可以嵌套和递归,允许动态申请和释放内存
  3. 如ADA语言,一个程序包分为两部分,可见的规范说明部分,它定义了程序包外面可以访问的对象,程序包体部分,它实际定义程序包的实现细节。封装。
  4. 如JAVA语言,面向对象的高级语言,注意ADA语言不能称为面向对象语言是因为ADA语言不支持多态等。
  • 作用域:一个名字能被使用的区域范围称作这个名字的作用域。
  • 名字作用域规则—— " 最近嵌套原则 "
    在这里插入图片描述

2.3 数据类型与操作(掌握)

  • 一个数据类型通常包括三种要素

    1. 用于区别这种类型数据对象的属性
    2. 这种类型的数据对象可以具有的
    3. 可以作用于这种类型的数据对象的操作
  • 初等数据类型

    1. 数值类型
    2. 逻辑类型
    3. 字符类型
    4. 指针类型
  • 标识符与名字

    • 标识符:以字母开头的,由字母数字组成的字符串。

    • 标识符名字两者有本质区别

    1. 标识符是语法概念。

    2. 名字有确切的意义和属性。

  • 名字

    • :单元中的内容
    • 属性:类型和作用域
  • 数组
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 其他数据类型

    • 字符串:符号处理、公式处理

    • 表格:本质上是一种记录结构

    • 线性表:一组顺序化的记录结构

    • :一种线性表,后进先出, 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 ab } ,则

    ∑ ∗ ∑* = { ε , 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型文法怎么写暂时没想到。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
  将事物的状态和行为用数学符号形式化表达的语言,为编写计算机程序和验证计算机程序的正确性提供依据,是软件工程中编码之前的规格说明语言。   Z语言是一种以一阶谓词演算为主要理论基础的规约语言,是一种功能性语言。形式化描述语言Z指的是著名数学家Zermelo,它是目前使用最广泛的一种形式化描述语言,在软件产业的一些大型项目中已经获得成功的应用,Z以带等词的一阶谓词逻辑ZF(Zermelo-Fraenkel,蔡梅罗-弗兰科尔)公理集合论为主要数学基础。在Z中有两种语言:数学语言和模式(Schema)语言。数学语言用来描述系统的各种特征:对象及其之间的关系。模式语言是一种半图形化的语言,它用来构造、组织形式化说明的描述、整理、封装信息块并对其命名以便可以重用这些信息块。通常,形式化说明的可读性都不太好,但由于Z采用半图形化的模式语言,能用一种比较直观、有条理的方式来表达形式化说明,这就改善了可读性。   Z语言是由牛津大学程序设计研究小组开发的一种形式语言,之后该小组与IBM的Hursley实验室合作,将Z语言用于IBM客户信息控制系统(Customer Information and Control System,CICS)的开发,使得最终的产品质量得到了全面的提高,所监测出的错误数量大大减少,并且整体开发费用降低了9%。在ISO指导下的国际标准化Z工作与2002年完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值