前言

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

文章目录

  • 前言
  • 高级程序设计语言
    • 一、语言概述
      • 1.1 语法 v.s. 语义
      • 1.2 作用域
      • 1.3 标识符 v.s. 名字
      • 1.4 左值与右值
    • 二、语法描述
      • 2.1 基本概念
      • 2.2 上下文无关文法
      • 2.3 推导
        • 2.3.1 基本概念
        • 2.3.2 语法树
        • 2.3.3 二义性
      • 2.4 形式语言
        • 2.4.1 概述
        • 2.4.2 文法对比

高级程序设计语言

一、语言概述

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 基本概念

  • 字母表:一个有穷字符集,记为 ∑\sum∑

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

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

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

    • 空字是字符串,不是字符
  • 字的全体:∑∗\sum^*∑∗ 表示 ∑\sum∑ 上的所有字的全体,包含空字

  • 子集连接(积):

    • ∑∗\sum^*∑∗ 的子集 U 和 V 的连接(积)定义为
      UV={αβ∣α∈U&β∈V}UV=\{\alpha \beta | \alpha \in U \& \beta \in V\} UV={αβ∣α∈U&β∈V}
  • n次积

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

2.2 上下文无关文法

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

  • VT:V_T:VT​: 终结符(Terminal)集合,非空
  • VN:V_N:VN​: 非终结符(Noterminal)集合,非空,且 VT⋂VN=∅V_T\bigcap V_N = \emptysetVT​⋂VN​=∅
  • S:S:S: 文法的开始符号,S∈VNS\in V_NS∈VN​
    • S是特殊非终结符,表示所定义的语言最终感兴趣的语法单位,如英语描述中的“句子”,程序语言描述的“程序”
  • P:P:P: 产生式集合(有限),每个产生式形式如下
    • P→α,P∈VN,α∈(VT⋃VN)∗P\rightarrow \alpha, P\in V_N, \alpha \in (V_T \bigcup V_N)^*P→α,P∈VN​,α∈(VT​⋃VN​)∗
    • $P \rightarrow \alpha $ 表示 “P定义为α\alphaα”
  • 开始符 SSS 至少必须在某个产生式的左部出现一次

2.3 推导

2.3.1 基本概念
  • $\Rightarrow $:直接推出,只能对一个非终结符推导一次
  • $\rightarrow $:被定义为

「*推出 & +推出」

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

「句型、句子推导练习」

  • 文法 => 句子

  • 句子 => 文法

    • 此类题目稍微难一些,需要用递归思想来解决,优先考虑最简结构
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. HTML4基本编译原理,Stanford公开课《编译原理》学习笔记(1~4课)

    课程里涉及到的内容讲的还是很清楚的,但个别地方有点脱节,任何看不懂卡住的地方,请自行查阅经典著作<Compilers--priciples, Techniques and Tools>(也 ...

  3. Stanford公开课《编译原理》学习笔记(2)递归下降法

    [摘要] javascript实现递归下降语法解析 示例代码托管在:http://www.github.com/dashnowords/blogs B站地址:[编译原理] Stanford公开课:[S ...

  4. Stanford公开课《编译原理》学习笔记(1~4课)

    [摘要] 编译原理基础 示例代码托管在:http://www.github.com/dashnowords/blogs B站地址:[编译原理] Stanford公开课:[Stanford大学公开课官网 ...

  5. 《编译原理》学习笔记 ·002【第二章:文法和语言(形式语言理论)-1】

    注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 文章目录 零.引言 一.符号串与符号串集合 1.字母表 2.符 ...

  6. 【编译原理】学习笔记以及课程设计

    编译原理 教材用的是<编译原理>(第三版)陈火旺著,电子版戳这里密码:x4ut 课后习题答案戳这里密码:nkv9 教学PPT戳这里密码:0tfz PPT习题答案戳这里密码:v9ct (侵删 ...

  7. 《编译原理》学习笔记 ·003【第二章:文法和语言(形式语言理论)-2】

    注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 文章目录 三.文法和语言的分类 1.Chomsky语言分类法 ...

  8. 【编译原理】学习笔记1 词法分析

    进行词法分析,打印分析结果. 编译器是一个程序:输入字符串,输出目标代码. 词法分析: 读入源码字节,将其组成有意义的TOKEN流. 语法分析: 根据TOKEN流构建树形的中间表示. 语义分析: 检查 ...

  9. 《编译原理》学习笔记 ·001【第一章:总论】

    注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 文章目录 一.编译程序 1.编译程序 2.编译基础设施 3.编 ...

  10. 【编译原理】编译原理系统学习与实践系列文章汇总目录(持续更新中)

    本文属于「编译原理」系列文章的汇总目录,这一系列正式开始于2021/10/22,着重于「编译原理的学习与实践」.众所周知,编译原理难学难精,因此本系列将至少持续到作者本人「精通编译原理」为止(笑).由 ...

最新文章

  1. 简单几何(线段覆盖) POJ 3347 Kadj Squares
  2. JAVA设计模式之不变模式
  3. 推荐8个值得每天一看的网站,值得收藏起来!
  4. HP小型机superdome配置MC双机、PV、VG、LV初体验
  5. 英国电信公司沃达丰遭到网络攻击
  6. (转)yi_meng linux 下 ifcfg-eth0 配置 以及ifconfig、ifup、ifdown区别
  7. spring编程式事务
  8. 马斯克点赞中国新能源汽车产业,特斯拉加快中国超级充电网络布局
  9. IG击败TOP进入春季赛决赛 王思聪督战时吃玉米动作亮了
  10. android 怎么获取app 字体颜色,Android APP使用自定义字体实现方法
  11. sp_MSforeachtable简介; 遍历数据库中的所有表运行命令
  12. FT2000+下使用Clonezilla进行系统备份还原
  13. 计算机科学成为独立学科的奠基人,详解卡内基梅隆大学计算机学院
  14. E3来了,今年有哪些令人期待的游戏新作?
  15. cubieboard笔记
  16. linux无法更改屏幕亮度调节软件,在Deepin系统中安装闭源显卡驱动后屏幕亮度无法调节的解决...
  17. 乘风破浪的中国数据库
  18. SQL语句查询重复语句并进行标记和更新
  19. SpringCloud Gateway + Spring Security
  20. Zepto课程-张晓飞-专题视频课程

热门文章

  1. java、js的编码、解码
  2. 升级:myeclipse 2015 ci 16发布
  3. 异步下载图片+图片缓存
  4. 我把Ubuntu 10.10放进了自己的口袋
  5. 在屏幕中间分别显示绿色、绿低红色、白底蓝色的字符串'welcome to masm!'
  6. linux标准mib,Linux系统中测试你的MIB值
  7. clickhouse 同步mysql_ClickHouse 常用管理命令
  8. C程序设计案例(牛顿迭代法求高次方程的根)
  9. 求一篇计算机word文档作业,计算机应用基础作业3:Word2003
  10. mysql 查看修改连接数据库_mysql查看最大连接数和修改mysql数据库最大连接数方法...