编译原理完整学习笔记(二):高级程序设计语言

前言

如果你对这篇文章可感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。


高级程序设计语言

一、语言概述

1.1 语法 v.s. 语义
  • 程序本质上是一定字符集上的字符串

  • 语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序

    • 定义了程序的形式结构
    • 定义语法单位的意义属于语义问题
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J5RAPXQD-1597629840670)(media/15920285407394.jpg)]
  • 语义:一组规则,定义一个程序的意义

    • 例如 “关于函数调用时参数传递方法的描述” 属于语义定义
1.2 作用域
  • 同一个标识符在不同过程中代表不同的名字
  • 作用域:一个名字能被使用的区域范围
  • 规则:“最近嵌套原则”
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ty2WOvle-1597629840673)(media/15920288203824.jpg)]
1.3 标识符 v.s. 名字

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

「标识符」

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

「名字」

  • 含义:标识程序中的对象
  • 意义和属性:
    • 值:单元中的内容
    • 属性:类型和作用域
  • 说明方式
    • 说明语句明确规定
      • int score
    • 隐含说明
      • FORTRAN 以 I,J,K,…,N 为首的名字代表整型,否则为实型
    • 动态确定
      • 走到哪里,是什么,算什么
  • 名字的绑定
    • 名字的绑定是指将标识符与所代表的程序数据或代码进行关联
    • 静态绑定:发生在编译过程中,如变量声明、类型定义、函数定义
    • 动态绑定:发生在运行过程中,如多态、虚函数

「二者区别」

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

赋值语句:A := B

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

「简单判断」

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

二、语法描述

2.1 基本概念
  • 字母表:一个有穷字符集,记为 ∑ \sum

  • 字符:字母表中每个元素

  • 字 / 字符串: ∑ \sum 上的字(也叫字符串)是指由 ∑ \sum 中的字符所构成的一个有穷序列

  • 空字:不包含任何字符的序列,记做 ε \varepsilon ε

    • 空字是字符串,不是字符
  • 字的全体: ∑ ∗ \sum^* 表示 ∑ \sum 上的所有字的全体,包含空字
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8KOyBBqF-1597629840674)(media/15920350128263.jpg)]

  • 子集连接(积):

    • ∑ ∗ \sum^* 的子集 U 和 V 的连接(积)定义为
      U V = { α β ∣ α ∈ U & β ∈ V } UV=\{\alpha \beta | \alpha \in U \& \beta \in V\} UV={αβαU&βV}
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5F8zgD0n-1597629840676)(media/15920352594461.jpg)]
  • n次积

    • V自身的n次积记为 V n V^n Vn
    • V 0 = { ε } V^0=\{\varepsilon\} V0={ε}
    • V ∗ V^* V 是 V 的闭包: V ∗ = V 0 ⋃ V 1 ⋃ V 2 ⋃ . . . V^*=V^0\bigcup V^1 \bigcup V^2 \bigcup ... V=V0V1V2...
    • V + V^+ V+ 是 V 的正规闭包: V + = V V ∗ V^+=VV^* V+=VV
    • 「区别」
      • V ∗ V^* V 中始终有空字,但如果V中原来没有空字,则 V + V^+ V+ 中不会有空字
2.2 上下文无关文法

「上下文无关文法 G 的定义 - 四元组」
G = ( V T , V N , S , P ) G=(V_T,V_N,S,P) G=(VT,VN,S,P)

  • V T : V_T: VT: 终结符(Terminal)集合,非空
  • V N : V_N: VN: 非终结符(Noterminal)集合,非空,且 V T ⋂ V N = ∅ V_T\bigcap V_N = \emptyset VTVN=
  • S : S: S: 文法的开始符号, S ∈ V N S\in V_N SVN
    • S是特殊非终结符,表示所定义的语言最终感兴趣的语法单位,如英语描述中的“句子”,程序语言描述的“程序”
  • P : P: P: 产生式集合(有限),每个产生式形式如下
    • P → α , P ∈ V N , α ∈ ( V T ⋃ V N ) ∗ P\rightarrow \alpha, P\in V_N, \alpha \in (V_T \bigcup V_N)^* Pα,PVN,α(VTVN)
    • $P \rightarrow \alpha $ 表示 “P定义为 α \alpha α
  • 开始符 S S S 至少必须在某个产生式的左部出现一次
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ji4XTsUT-1597629840679)(media/15920358455169.jpg)]
2.3 推导
2.3.1 基本概念
  • $\Rightarrow $:直接推出,只能对一个非终结符推导一次
  • $\rightarrow $:被定义为

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AmboOYXj-1597629840681)(media/15920359554876.jpg)]

「*推出 & +推出」
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-unS3yAeF-1597629840682)(media/15920360635968.jpg)]

「概念辨析 - 句型 | 句子 | 语言」
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hDl2Qtot-1597629840683)(media/15920361148520.jpg)]

「句型、句子推导练习」

  • 文法 => 句子
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OAOnz8gr-1597629840684)(media/15920361631616.jpg)]

  • 句子 => 文法

    • 此类题目稍微难一些,需要用递归思想来解决,优先考虑最简结构
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zomnqQ5Y-1597629840685)(media/15920361951102.jpg)]
2.3.2 语法树

「最左/右推导」
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BlH8iSVF-1597629840686)(media/15920364374677.jpg)]

「语法树」
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uv8e9Q67-1597629840687)(media/15920364664043.jpg)]

2.3.3 二义性

「二义性举例」
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lLB5oBHK-1597629840688)(media/15920365073498.jpg)]

「文法 / 语言二义性」

  • 文法二义性:文法存在某个句子对应两颗不同语法树
    • 文法二义性问题是不可判定问题,不存在一个算法,能在有限步骤中,确切地判定一个文法是否二义
    • 但仍然存在很多充分条件可以判定一个文法是非二义的
      • 例如一个文法如果属于 LR 文法,则一定不是二义文法
  • 语言二义性:存在一个能推导出该语言的无二义文法
2.4 形式语言
2.4.1 概述
  • 乔姆斯基在1956年建立形式语言体系,将文法分为四种类型:0、1、2、3型

  • 四种类型唯一区别在于产生式
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4nEHv5Si-1597629840690)(media/15920370109028.jpg)]

  • 0型(短语文法,图灵机)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q9WBmSol-1597629840691)(media/15920370734529.jpg)]

  • 1型(上下文有关文法,线性界限自动机)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vkMRTBql-1597629840692)(media/15920370830382.jpg)]

  • 2型(上下文无关文法,非确定下推自动机)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5508UV77-1597629840692)(media/15920371094672.jpg)]

  • 3型(正规文法,有限自动机)

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D4UM7Ziy-1597629840695)(media/15920371304039.jpg)]

    • 正规式、正规集

      • 在这里插入图片描述
2.4.2 文法对比
  • 四种类型文法描述能力比较
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VaZgZS7p-1597629840696)(media/15920372016149.jpg)]

  • 上下文无关文法 v.s. 正规文法
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jOaffh8z-1597629840697)(media/15920372752516.jpg)]

  • 上下文无关文法 v.s. 上下文有关文法
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wmNxnjgW-1597629840697)(media/15920373163516.jpg)]

  • 上下文无关文法的局限 - 权衡思想
    在这里插入图片描述


资料来源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gene_INNOCENT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值