[编译原理学习笔记2-2] 程序语言的语法描述

文章目录

  • [编译原理学习笔记2-2] 程序语言的语法描述
    • [2.3.1] 上下文无关文法
    • [2.3.2] 语法分析树与二义性
    • [2.3.3] 形式语言鸟瞰
  • 后记

对于高级程序语言及编译程序而言,语言的语法定义是非常重要的。

一些先导概念:设 Σ\SigmaΣ 是一个有穷字母表,它的每个元素称为一个符号。 Σ\SigmaΣ上的一个符号串是指由Σ\SigmaΣ中的符号所构成的有穷序列。不包含符号的序列称为空字,记为ϵ\epsilonϵ。用Σ∗\Sigma^*Σ∗表示Σ\SigmaΣ上的所有符号串的全体,空字也包括在其中。

Σ∗\Sigma^*Σ∗的子集U和V中的 (连接)积 定义为:UV={αβ∣α∈U&β∈V}UV=\{ \alpha\beta∣\alpha∈ U \, \& \, \beta∈ V \}UV={αβ∣α∈U&β∈V};
规定 V0={ϵ}V^0=\{\epsilon\}V0={ϵ}

[2.3.1] 上下文无关文法

文法是描述语言的语法结构的形式规则(即语法规则)。
归纳起来,一个上下文无关文法G包括四个组成部分:一组终结符号,一组非终结符,一个开始符号,以及一组产生式

  • 终结符号:是组成语言的基本符号,即在程序语言中以前屡次提到的单词符号,如基本字,标识符,常数,算符和界符等
  • 非终结符号(也称语法变量):用来代表语法范畴。如“算术表达式”、“布尔表达式”、“过程”等
  • 开始符号:是一个特殊的非终结符号
  • 产生式(也称为产生规则或简称规则):是定义语法范畴的一种书写规则。形式是A−>αA->\alphaA−>α

一个产生式并不足以定义一个语法范畴,特别是需要含有递归的表达式

假定G是一个文法,S是它的开始符号。如果S=>*α\alphaα(表示从S出发,经0步或若干步可推出α\alphaα),则称α\alphaα是一个句型。仅含终结符号的句型是一个句子。文法G所产生的句子的全体是一个语言,将它记为L(G).
L(G)=α∣S=>+α&α∈Vt∗L(G)={\alpha|S =>^+ \alpha \,\&\, \alpha∈Vt^* } L(G)=α∣S=>+α&α∈Vt∗

形式上定义一个上下文无关文法G是一个四元式(Vt,Vn,S,£)

  • Vt是一个非空有限集,它的每一个元素 称为终结符号;
  • Vn是一个非空有限集,它的每一个元素称为非终结符号,Vt∩Vn=空;
  • S是一个非终结符号,称为开始符号;
  • £是一个产生式(有限)集合
  • 所谓最左推导是指:任何一步α=>β\alpha=>\betaα=>β都是对α\alphaα中的最左非终结符进行替换的。同样,可定义最右推导。

  • 有助于理解的一个推导

  • 有助于理解的一个例题

一些用到的符号:
双箭头:推导号
单箭头:生成式的符号
| :或

一些理解:就是没有这个非终结符就没法开始推导应该就是开始符号
开始符号能推出的所有,都叫句型
文法的开始符号也是一个句型(此时是零步推导,推他自己(即没有推))
开始符号只有一个(推导的起始,是一个左部符号)

[2.3.2] 语法分析树与二义性

可以用一张图表示一个句型的推导,这种表示称为语法分析树,或简称语法树
语法树的根结点开始符号所标记。在一棵语法树生长过程中的任何时刻,所有那些没有后代的端末结点自左至右排列起来就是一个句型

  • 何谓二义性?如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。也就是说,若一个文法存在某个句子,它有两个不同的最左(最右)推导,则这个文法是二义的。

[2.3.3] 形式语言鸟瞰

乔姆斯基把文法分为四种类型即0型、1型、2型、3型(0行强于1型,1行强于2型,2型强于3型)。

了解即可

后记

重点是推导、语法树、二义性,概念需要理解

[编译原理学习笔记2-2] 程序语言的语法描述相关推荐

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

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

  2. 编译原理学习笔记 5.1 翻译文法和语法制导翻译

    前言 参考课上PPT内容. 该学习笔记目前仅打算个人使用. 后续会进一步整理,包括添加笔记内容,标明参考资料. 更新中... 跳过目录 目录 导言 一.翻译文法和语法制导翻译 输入文法 翻译文法 活动 ...

  3. 编译原理学习笔记20——符号表

    编译原理学习笔记20--符号表 20.1 符号表的组织与操作 20.2 符号表的内容 20.3 利用符号表分析名字的作用域 20.1 符号表的组织与操作 符号表 符号表的作用与组织 符号表的整理和查找 ...

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

    高级程序设计语言 一.语言概述 1.1 语法 v.s. 语义 程序本质上是一定字符集上的字符串 语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序 定义了程序的形式结构 定义语 ...

  5. 【编译原理学习笔记】1:符号和符号串,文法和语言,文法的类型

    符号和符号串 字母表(符号集):元素的非空有穷集合. 符号:字母表中的元素. 符号串:由字母表中的符号组成的任何有穷序列. 头:如符号串z=xy中的x. 尾:如符号串z=xy中的y. 固有头:符号串的 ...

  6. 编译原理学习笔记一(待续)

    这几天忙着学英语,同时在学习编译原理,对这门课很感兴趣,已经制作了词法分析器,同时还在补充这个分析器的功能,也准备着手开始写语法分析器,看到最后能不能连在一起,我想如果能够将整套编译器的流程跑下来真的 ...

  7. 编译原理学习笔记 3.3 正则文法的状态图

    前言 参考东南大学廖力老师的编译原理教程和课上PPT内容. 该学习笔记目前仅打算个人使用. 后续会进一步整理,包括添加笔记内容,标明参考资料. 更新中... 跳过目录 目录 状态图的画法(根据文法画出 ...

  8. 编译原理学习笔记 6.2 符号表的组织与内容

    前言 参考课上PPT内容. 该学习笔记目前仅打算个人使用. 后续会进一步整理,包括添加笔记内容,标明参考资料. 更新中... 跳过目录 目录 一.符号表的结构与内容 "名字"域 & ...

  9. 【编译原理学习笔记】2:文法与语言描述,二义性,正规文法,左/右句型,句型分析

    已知语言描述写出文法 如某种语言中0和1的个数相同,文法可以是这样的: G[A]:A->0B|1CB->1|1A|0BBC->0|0A|1CC 还可以这样: G[S]:S->0 ...

最新文章

  1. C# Trim 的使用
  2. 写出程序删除链表中的所有接点
  3. Windows和Linux双系统时间不对的问题。
  4. 随手看的一本书《java微服务》,测试成功了其中的第一个样例
  5. 百度北京一面2016-3-18
  6. 程序员的艺术:排序算法舞蹈
  7. Facebook将在印度测试联网无人机,可连续飞行90天
  8. NVIDIA将全面支持笔记本混合显卡技术
  9. 全面开放运营3个月,百度揭秘Apollo最新技术创新
  10. android gradle NDK简介
  11. 快易省智:数据中心UPS四大演进方向
  12. 详解物理学四大神兽————麦克斯韦妖
  13. Centos上卸载阿里云盾
  14. 结束 oracle 锁 ps -ef|grepp.spid,oracle 解锁表剔除去session 和kill
  15. 游戏模拟器成了外挂帮凶,灰产对抗再升级
  16. 单片机片内存储器烧写
  17. 如何选择靠谱的游戏音乐外包呢?
  18. 基于java的智能手表_五款智能手表功能比较
  19. 实景三维模型色彩差异大,用模方与DasViewer直接对模型调色
  20. SVN 在idea 中无法查看历史记录

热门文章

  1. 【python】 输出换行字符 “\n“
  2. [问题已处理]-k8s出现Evicted状态
  3. 记一次COLA架构的实践
  4. Python中如何读取npy、npz文件?
  5. JavaScript Window Screen
  6. c++ 中的 LPCTSTR类型
  7. 【BLE】BLE扫描参数
  8. ROS2机器人操作系统简介2021英文字幕版本
  9. 模电(二)半导体二极管
  10. LVS负载均衡环境搭建