高级程序设计语言

一、语言概述

1.1 语法 v.s. 语义

  • 程序本质上是一定字符集上的字符串
  • 语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序
    • 定义了程序的形式结构
    • 定义语法单位的意义属于语义问题
  • 语义:一组规则,定义一个程序的意义

    • 例如 “关于函数调用时参数传递方法的描述” 属于语义定义

1.2 作用域

  • 同一个标识符在不同过程中代表不同的名字
  • 作用域:一个名字能被使用的区域范围
  • 规则:“最近嵌套原则”

1.3 标识符 v.s. 名字

标识符是语法概念,名字是语义概念。

「标识符」

  • 以字母开头的,由字母数字组成的字符串

「名字」

  • 含义:标识程序中的对象
  • 意义和属性:
    • 值:单元中的内容
    • 属性:类型和作用域
  • 说明方式

    • 说明语句明确规定

      • int score
    • 隐含说明

      • FORTRAN 以 I,J,K,...,N 为首的名字代表整型,否则为实型
    • 动态确定

      • 走到哪里,是什么,算什么
  • 名字的绑定

    • 名字的绑定是指将标识符与所代表的程序数据或代码进行关联
    • 静态绑定:发生在编译过程中,如变量声明、类型定义、函数定义
    • 动态绑定:发生在运行过程中,如多态、虚函数

「二者区别」

  • 标识符是语法概念
  • 名字有确切的意义和属性

1.4 左值与右值

赋值语句:A := B

  • 名字的左值:该名字代表的存储单元的地址
  • 名字的右值:该名字代表的存储单元的内容

「简单判断」

  • 出现在赋值号左边的值必须具有左值,出现在赋值号右边的值则必须具有右值。

二、语法描述

2.1 基本概念

  • **字母表:**一个有穷字符集,记为

  • **字符:**字母表中每个元素
  • 字 / 字符串:
    上的字(也叫字符串)是指由
    中的字符所构成的一个有穷序列
  • **空字:**不包含任何字符的序列,记做
    • 空字是字符串,不是字符
  • 字的全体:

    表示
    上的所有字的全体,包含空字
  • 子集连接(积):

    • 的子集 U 和 V 的连接(积)定义为
  • n次积

    • V自身的n次积记为

    • 是 V 的闭包:
    • 是 V 的正规闭包:
    • 「区别」
      • 中始终有空字,但如果V中原来没有空字,则
        中不会有空字

2.2 上下文无关文法

「上下文无关文法 G 的定义 - 四元组」

  • 终结符(Terminal)集合,非空
  • 非终结符(Noterminal)集合,非空,且
  • 文法的开始符号,
    • S是特殊非终结符,表示所定义的语言最终感兴趣的语法单位,如英语描述中的“句子”,程序语言描述的“程序”
  • 产生式集合(有限),每个产生式形式如下
    • 表示 “P定义为
  • 开始符

    至少必须在某个产生式的左部出现一次

2.3 推导

2.3.1 基本概念

  • :直接推出,只能对一个非终结符推导一次
  • :被定义为

「*推出 & +推出」

「概念辨析 - 句型 | 句子 | 语言」

「句型、句子推导练习」

  • 文法 => 句子
  • 句子 => 文法

    • 此类题目稍微难一些,需要用递归思想来解决,优先考虑最简结构

2.3.2 语法树

「最左/右推导」

「语法树」

2.3.3 二义性

「二义性举例」

「文法 / 语言二义性」

  • 文法二义性:文法存在某个句子对应两颗不同语法树

    • 文法二义性问题是不可判定问题,不存在一个算法,能在有限步骤中,确切地判定一个文法是否二义
    • 但仍然存在很多充分条件可以判定一个文法是非二义的
      • 例如一个文法如果属于 LR 文法,则一定不是二义文法
  • 语言二义性:存在一个能推导出该语言的无二义文法

2.4 形式语言

2.4.1 概述

  • 乔姆斯基在1956年建立形式语言体系,将文法分为四种类型:0、1、2、3型
  • 四种类型唯一区别在于产生式
  • 0型(短语文法,图灵机)
  • 1型(上下文有关文法,线性界限自动机)
  • 2型(上下文无关文法,非确定下推自动机)
  • 3型(正规文法,有限自动机)
    • 正规式、正规集

2.4.2 文法对比

  • 四种类型文法描述能力比较
  • 上下文无关文法 v.s. 正规文法
  • 上下文无关文法 v.s. 上下文有关文法
  • 上下文无关文法的局限 - 权衡思想

程序设计语言编译原理_编译原理学习笔记(二):高级程序设计语言相关推荐

  1. 编译原理学习笔记2——高级程序设计语言概述

    编译原理学习笔记2--高级程序设计语言概述 2.1常用的高级程序设计语言 2.2程序设计语言的定义 2.2.1语法 2.2.1语法 2.2.3程序语言的基本功能和层次机构 2.2.4程序语言成分的逻辑 ...

  2. python语言单行注释符_云计算开发学习笔记:Python3注释

    大家在学习各种编程语言的时候都会在代码里面添加一些注释,这个也是为了方便日后对代码的查找和修改,各种编程语言的注释方式略有不同,Python3语言也一样有自己的注释方式,下面我们来了解一下都有哪几种. ...

  3. 《COM原理与应用》学习笔记二——COM对象和COM接口的实现

    COM对象是给用户提供服务的封装的实体.这个应该和C++中类的对象理解起来是相似的.但是有时候也把COM对象当作提供服务的那个类.COM对象也对数据进行了封装,然后也提供了接口.不过和类还是有一些不一 ...

  4. css中怎么加入立体模型,CSS学习笔记二:css 画立体图形

    继上一次学了如何去运用css画平面图形,这一次学如何去画正方体,从2D向着3D学习,虽然有点满,但总是一个过程,一点一点积累,然后记录起来. Transfrom3D 在这一次中运用到了一下几种属性: ...

  5. 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言

    嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...

  6. 【相机标定与三维重建原理及实现】学习笔记1——相机模型数学推导详解

    目录 前言 一.小孔成像模型 二.坐标系的变换 1.世界坐标系到相机坐标系的变换(刚体变换)[xw^→xc^\boldsymbol {\hat{x_{w}}}\rightarrow \boldsymb ...

  7. 《区块链原理与技术》学习笔记(六) — 区块链安全

    <区块链原理与技术>学习笔记 第六部分 四.区块链网络层 1. 网络层安全 1.1 分布式拒绝服务攻击(DDos) 1.2 延展性攻击 1.3 日蚀攻击 1.4 分割攻击 1.5 延迟攻击 ...

  8. 【Linux学习笔记④】——Shell程序设计【变量 输入与输出 条件表达式 判断语句 循环语句 Shell函数】

    ⌛️ 文章目录 一.Shell 概述 二.Shell 脚本的定义与执行 2.1 Shell 脚本的定义 2.2 Shell 脚本的执行 三.Shell 变量 3.1 用户自定义变量 3.2 环境变量 ...

  9. 《Go语言圣经》学习笔记 第一章 Go语言入门

    Go语言圣经学习笔记 第一章 Go语言入门 目录 Hello, World 命令行参数 查找重复的行 GIF动画 获取URL 并发获取多个URL Web服务 本章要点 注:学习<Go语言圣经&g ...

  10. C语言学习笔记-P1 初识C语言(1)

    C语言学习笔记-P1 初识C语言(1) P1 初识C语言(1) 一.什么是C语言 1.定义 2.发展 二.第一个C语言程序 Hello World 三.数据类型 四.变量,常量 未完待续!!! P1 ...

最新文章

  1. 辨异 —— 冠词(定冠词、不定冠词、零冠词)
  2. t检验自由度的意义_T检验、F检验和统计学意义
  3. 前端基础-jQuery的优点以及用法
  4. hdu4750Count The Pairs(最小生成树找瓶颈边)
  5. MAUI 移植 Xamarin.Forms 自定义渲染器
  6. 如何从Java EE无状态应用程序连接到MongoDB
  7. 减少 JavaScript 代码量的原生技术
  8. 代理ip池的ip是重复利用的吗_爬虫被封怎么办?用Node.js构建一个私人IP代理池...
  9. 来自 100 年前不可思议的绘画预言
  10. 最优投资组合--马科维茨投资组合理论
  11. 1336A - Linova and Kingdom
  12. Linux命令行与shell脚本(17)--正则表达式
  13. 艾司博讯:拼多多网店账号出现异常该怎么解决?
  14. 数字宫殿方法记忆设计模式
  15. MySQL前缀索引和索引选择性
  16. 浅谈:基于物联网的固定资产管理技术
  17. 多目标进化算法基础知识整理
  18. M1 Dock智能硬件环境搭建(MaixPy安装及使用)
  19. 优秀网页设计:使用纹理的20个华丽示例
  20. Loadrunner如何使用谷歌浏览器录制脚本

热门文章

  1. BZOJ 4221 [JOI2012春季合宿]Kangaroo (DP)
  2. linux 文件io实例代码,linux 文件IO(示例代码)
  3. c语言程序设计例题椭圆,2016年西安邮电大学理学院高级语言程序设计之C语言程序设计复试笔试仿真模拟题...
  4. 【Android】SDDL刷机
  5. IE浏览器与非IE浏览器JS日期兼容性问题处理
  6. c语言中有bool型变量吗?
  7. 通往奥格瑞玛的道路(洛谷 1462)
  8. 新版ADT出现appcompat_v7的问题
  9. HTML系列(七):多媒体
  10. 实验1 Windows汇编语言开发环境