[编译原理学习笔记2-2] 程序语言的语法描述
[编译原理学习笔记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] 程序语言的语法描述相关推荐
- 编译原理学习笔记2——高级程序设计语言概述
编译原理学习笔记2--高级程序设计语言概述 2.1常用的高级程序设计语言 2.2程序设计语言的定义 2.2.1语法 2.2.1语法 2.2.3程序语言的基本功能和层次机构 2.2.4程序语言成分的逻辑 ...
- 编译原理学习笔记 5.1 翻译文法和语法制导翻译
前言 参考课上PPT内容. 该学习笔记目前仅打算个人使用. 后续会进一步整理,包括添加笔记内容,标明参考资料. 更新中... 跳过目录 目录 导言 一.翻译文法和语法制导翻译 输入文法 翻译文法 活动 ...
- 编译原理学习笔记20——符号表
编译原理学习笔记20--符号表 20.1 符号表的组织与操作 20.2 符号表的内容 20.3 利用符号表分析名字的作用域 20.1 符号表的组织与操作 符号表 符号表的作用与组织 符号表的整理和查找 ...
- 程序设计语言编译原理_编译原理学习笔记(二):高级程序设计语言
高级程序设计语言 一.语言概述 1.1 语法 v.s. 语义 程序本质上是一定字符集上的字符串 语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序 定义了程序的形式结构 定义语 ...
- 【编译原理学习笔记】1:符号和符号串,文法和语言,文法的类型
符号和符号串 字母表(符号集):元素的非空有穷集合. 符号:字母表中的元素. 符号串:由字母表中的符号组成的任何有穷序列. 头:如符号串z=xy中的x. 尾:如符号串z=xy中的y. 固有头:符号串的 ...
- 编译原理学习笔记一(待续)
这几天忙着学英语,同时在学习编译原理,对这门课很感兴趣,已经制作了词法分析器,同时还在补充这个分析器的功能,也准备着手开始写语法分析器,看到最后能不能连在一起,我想如果能够将整套编译器的流程跑下来真的 ...
- 编译原理学习笔记 3.3 正则文法的状态图
前言 参考东南大学廖力老师的编译原理教程和课上PPT内容. 该学习笔记目前仅打算个人使用. 后续会进一步整理,包括添加笔记内容,标明参考资料. 更新中... 跳过目录 目录 状态图的画法(根据文法画出 ...
- 编译原理学习笔记 6.2 符号表的组织与内容
前言 参考课上PPT内容. 该学习笔记目前仅打算个人使用. 后续会进一步整理,包括添加笔记内容,标明参考资料. 更新中... 跳过目录 目录 一.符号表的结构与内容 "名字"域 & ...
- 【编译原理学习笔记】2:文法与语言描述,二义性,正规文法,左/右句型,句型分析
已知语言描述写出文法 如某种语言中0和1的个数相同,文法可以是这样的: G[A]:A->0B|1CB->1|1A|0BBC->0|0A|1CC 还可以这样: G[S]:S->0 ...
最新文章
- C# Trim 的使用
- 写出程序删除链表中的所有接点
- Windows和Linux双系统时间不对的问题。
- 随手看的一本书《java微服务》,测试成功了其中的第一个样例
- 百度北京一面2016-3-18
- 程序员的艺术:排序算法舞蹈
- Facebook将在印度测试联网无人机,可连续飞行90天
- NVIDIA将全面支持笔记本混合显卡技术
- 全面开放运营3个月,百度揭秘Apollo最新技术创新
- android gradle NDK简介
- 快易省智:数据中心UPS四大演进方向
- 详解物理学四大神兽————麦克斯韦妖
- Centos上卸载阿里云盾
- 结束 oracle 锁 ps -ef|grepp.spid,oracle 解锁表剔除去session 和kill
- 游戏模拟器成了外挂帮凶,灰产对抗再升级
- 单片机片内存储器烧写
- 如何选择靠谱的游戏音乐外包呢?
- 基于java的智能手表_五款智能手表功能比较
- 实景三维模型色彩差异大,用模方与DasViewer直接对模型调色
- SVN 在idea 中无法查看历史记录