一、前言

编译过程的核心就是翻译,这是一个十分复杂的信息加工过程,其加工对象是用某种高级语言编写的程序。把用一种数学符号和规则来描述的语言的方式叫做形式描述,而把用一种数学符号和规则来描述的语言叫做形式语言。以下是学习形式语言必备的一些密切相关的术语和概念。


二、文法与语言

字母表:

元素的非空有穷集合,每个元素称为符号,字母表也可叫符号集。典型的符号有:字母、数字、标点符号和各种运算符。

符号串:

由字母表上0个或多个符号所组成的任何有穷序列。注意:ɛ也是字母表上的符号串,由0个符号组成。

符号串的运算:
  • 符号串的长度:若x是字母表∑上的符号串,那么其长度指的是x钟所含符号的个数,记为:|x|;

  • 符号串相等:若x、y是字母表∑上的两个符号串,当且仅当组成x的各符号与组成y的各符号依次相等时,则x=y;

  • 符号串的前缀:指从符号串x的末尾删除0个或多个符号后得到的符号串,称其为x符号串的前缀;

  • 符号串的后缀:指从符号串x的开头删除0个或多个符号后得到的符号串,称其为x符号串的后缀;

  • 符号串的子串:指从符号串x的开头和末尾删除0个或多个符号后得到的符号串,称其为x的子串。

  • 符号串的幂运算:假设x是符号串,则x的幂运算定义为:x0 = ɛ,x1 = x,x2 = xx,… ,xn = xxx…xxx

  • 符号串的连接:若x、y是两个符号串,那么xy则表示连接,即将y连接到x的后面。如果x、y属于同一个字母表上的符号串,那么xy也属于该字母表上的符号串;

    注意:连接没有交换率,即xy≠yx;而对于空串ɛ有ɛx=xɛ=x

符号串集合的运算:
  • 符号串集合的乘积运算:假设A、B分别是两个符号串集合,那么AB定义为:AB={xy|属于A,y属于B},任何符号串集合与{ɛ}的乘积等于其本身,即符号串集Z与ɛ的乘积表示为:Z{ɛ}=Z;

  • 符号串集合的幂运算:假设A为符号串集合,则A的幂运算定义为:A0 = {ɛ}, A1 = A,A2 = AA,… ,An = AAA…AAA

  • 集合的正闭包与闭包

    设A为一个集合,则集合A的正闭包用A+表示,定义为:A+ = A1∪A2∪A3∪···∪An···∪;

    该集合的闭包为:A* = A+∪A0

文法:

​ 概念:描述语言语法结构的一系列形式规则。

文法表示为一个四元式G(Vn, Vt, P, Z)

  1. Vn 是一个非空有穷集合,该集合的每个元素称为非终结符,至少在规则的左部出现一次。
  2. Vt是一个非空有穷集合,该集合的每个元素称为终结符,只在规则的右部出现。
  3. P是一个非空有穷集合,该集合的每个元素称为产生式或规则。表示形式有两种:ɑ→β 或 α::=β。
  4. Z是Vn 的一个特殊非终结符,称为文法的识别符号或开始符号,它至少必须在某个规则的左部出现一次。
直接推导:

​ 概念:xαy→xβy的过程,称为直接推导,反方向称为直接规约。

规范推导:

​ 也叫最右推导。即每步推导只变换符号串中最右边的非终结符;

​ 相反,每步推导只变换符号串中最左边的非终结符,最左推导。

句型:

包含非终结符和终结符的符号串。

句子:

只包含终结符的符号串,是特殊的句型。

语言:

一个文法G[Z]所产生的所有句子的集合,即L(G[Z]) = {x | x ∈ V*T, 且Z =+> x}。

文法与语言的关系:
  • 给定一个文法,就能从结构上唯一地确定其语言,即G→L(G);
  • 给定一种语言,能确定其文法,但不唯一,即L→G1或G2或G3…;
  • 两种不同的文法可描述相同的语言,则称这两个文法为等价文法。
递归规则:

​ 在规则的右部含有与规则左部相同符号的规则。

递归文法:

​ 在文法中至少包含一条递归规则,则称文法为直接递归的;有些文法属于间接递归的。由递归文法描述的语言是无穷的。

短语:

​ 在句型的推导过程中能由某个非终结符推导出的子串。

简单短语:

​ 能由非终结符直接推导出的子串。

句柄:

​ 任意句型的最左简单短语。是唯一的

规范规约:

​ 每步都对规约句型的句柄规约,也叫最左归约。规范推导与规范规约互为逆过程。

文法的二义性:

​ 如果一个文法所定义的句子中有某个句子或句型,它存在两棵不同的语法树,那么这个句子或句型是二义性的,该文法也是二义性文法

有关文法的实用性限制:
  1. 不能有U::=U这样的有害规则;
  2. 不能有多余的规则:一是推导始终用不到的规则;二是一旦使用某规则后无法推出终结符号串的规则。
文法与语言的分类:
  • 0型文法:α→β,其中α∈V+ ,β∈V*,V = Vn∪Vt 即规则左部可以是符号串但不能为空,规则右部可以是符号串也能为空。由0型文法描述的语言称为0型语言。
  • 1型文法:α∪β→αuβ,其中U属于Vn,α、β∈V*,u∈V+,V = Vn∪Vt 即规则左部可为符号串,其中U是非终结符且左右为α和β的情况下U可变为u。因为规则中的α和β不发生改变,所以这种文法也称为上下文有关文法。
  • 2型文法:U→u,其中U∈Vn ,u∈V*,V = Vn∪Vt 即规则的左部必须是一个非终结符,规则右部u是V上的符号串,是对1型文法作出了限制,要求α和β必须为空。由2型文法描述的语言称为上下文无关文法。是描述程序设计语言语法部分的主要文法。
  • 3型文法:也叫正则文法。规则的表现形式有3种。例如:U→α或U→Wα(左线性)或U→αW(右线性)其中U、W∈Vn,α∈Vt 由3型文法描述的语言称为3行文法。高级程序设计语言的单词符号,如标识符、无符号整数等都是采用3型文法来描述的。

文法与语言(笔记版)相关推荐

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

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

  2. golang笔记15--go语言单任务版爬虫

    golang笔记15--go语言单任务版爬虫 1 介绍 2 单任务版爬虫 2.1 获得初始页面内容 2.2 正则表达式 2.3 提取城市和 url 2.4 单任务版爬虫的架构 2.5 Engine 与 ...

  3. golang笔记16--go语言并发版爬虫

    golang笔记16--go语言并发版爬虫 1 介绍 2 并发版爬虫 2.1 并发版爬虫架构 2.2 简单调度器 2.3 并发调度器 2.4 队列实现调度器 2.5 重构和总结 2.6 更多城市 2. ...

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

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

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

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

  6. 【学习笔记】编译原理 第二章 文法和语言

    以下为参考课件与<编译技术>(张莉等著)的个人整理,若有错误欢迎指出 第二章 文法和语言 文章目录 第二章 文法和语言 一.文法的非形式讨论 二.文法的形式定义 1.文法的形式定义 2.推 ...

  7. PYTHON 语言笔记

    PYTHON 语言笔记(python3.8.3版) Noted by: 张达瀚 Python 下载 https://www.python.org/downloads/ 我的第一个python > ...

  8. 【SpringBoot】最新版2019Spring Boot配置解析,源码解析(速成SpringBoot)——学习笔记版【2】

    SpringBoot配置文件 文章目录 SpringBoot配置文件 四.配置文件 1.简介 2.YAML用法 2.1 简介 2.2语法 3.为属性注入值 3.1使用.yml配置文件 3.1编写.ym ...

  9. Shell脚本语言笔记

    Shell脚本语言笔记 一.shell是什么? 二.Shell 是一种脚本语言 1.定义变量 2.单引号和双引号的区别: 3.将命令的结果赋值给变量,常见的有以下两种方式: 4.只读变量 5.删除变量 ...

最新文章

  1. 程序员四大忌 你该如何避免呢?
  2. poj 1852 Ants_贪心
  3. mysql开启事务_MySQL入门之事务(上)
  4. dll oem证书导入工具_技术干货 | 恶意代码分析之反射型DLL注入
  5. Vision Transformer(ViT)PyTorch代码全解析(附图解)
  6. mysql 数据库连接 w3school_PHP 连接 MySQL
  7. VMM2012应用指南之11-将虚拟机转换为模板
  8. 解决win7 安装完jdk7后,再安装jdk8出现的问题
  9. 如何用c语言做衣物存放系统,C语言一个简单的商店管理系统
  10. 答题微信小程序实现(5):大功告成,整个模板,题库导入/切换/积分/选择对错判断/闯关成功
  11. 代理模式简介与实现 - delegate
  12. 中国内地、台湾、香港、澳门和国外DNS服务器地址列表
  13. RN通信底层原理 -- 总结篇
  14. 2019微博热点,盘一盘那些记忆中的大瓜
  15. 北理工嵩天Python语言程序设计笔记(10 Python计算生态概览)
  16. 水果店从哪里进货便宜,水果店都有哪些进货渠道
  17. 通过sql注入窃取用户数据库信息
  18. 尝试EFM32下的fatfs的使用
  19. 一图看清公募基金十年持仓行业变迁
  20. java开发最新获取抖音无水印视频和背景音乐

热门文章

  1. 什么是百度SEO?百度SEO优化怎么做?
  2. 图解数组计算模块NumPy下(三角函数、四舍五入函数(around)、取整、将弧度转化为角度、统计分析函数、中位数、数组的排序、argsort()、lexsort())
  3. 各大IT公司的起名缘由 [转载]
  4. Power BI-同比、环比、累计值
  5. 蓝桥 算法训练 藏匿的刺客(C语言)
  6. 谷歌浏览器历史记录查看很慢解决方案
  7. mba辅导班哪个机构好?全方位解答<title>mba辅导班</title>
  8. 查看/修改git用户名密码
  9. python读取图片像素矩阵
  10. 吃货联盟订餐系统(用数组写的)