文章目录

  • @[toc]
  • 1. 基本概念
    • (1). 字母表
    • (2). 符号表上的运算
      • 1). 字母表的乘积
      • 2). 字母表上的幂运算
      • 3). 字母表的正闭包
      • 4). 字母表的闭包
    • (3). 串
    • (4). 符号串上的运算
      • 1). 符号串的长度
      • 2). 符号串的连接
      • 3). 符号串的幂运算
    • (5). 符号串集合上的运算
      • 1). 符号串集合的乘积运算
      • 2). 符号串集合的幂运算
      • 3). 符号串集合的闭包
  • 2. 文法定义
    • (1). 文法
    • (2). 文法的形式化定义
    • (3).产生式
    • (4). 符号约定
      • 1). 终结符
      • 2). 非终结符
  • 3. 语言定义
    • (1). 推导和规约
    • (2). 句型和句子
    • (3). 语言的形式化定义
    • (4). 语言上的运算
  • 4. 文法的分类
    • (1). 0型文法
    • (2). 1型文法(CSG)
    • (3). 2型文法(CFG)
    • (4). 3型文法(RG)
  • 5. CFG的分析树
    • (1). 概念
    • (2). 短语
    • (3). 二义性文法

1. 基本概念

(1). 字母表

​ 字母表:字母表Σ是符号元素的非空集合.

​ 符号:字母表中的元素.

​ 符号串:字母表中符号组成的任意有穷序列.

例:有一个字母表Σ={a,b}
则:a,b是字母表中的符号a,aa,aaa,ab,bb,bbb,abab,abaabb.....这些都是符号串

​ 空符号串:不含任何符号的符号串,用ε(epsilon)表示.

(2). 符号表上的运算

1). 字母表的乘积

​ Σ1Σ2 = {ab| a∈ Σ1, b ∈ Σ2}

{0, 1}{a, b} = {0a, 0b, 1a, 1b}

2). 字母表上的幂运算

​ 字母表的n次幂相当于n个字母表相乘.也就是长度为n的符号串构成的集合

3). 字母表的正闭包

​ Σ+ = Σ1 ∪ Σ2 ∪ Σ3 ∪ …

​ 相当于由字母表中字母构成的除空串以外的所有串.

4). 字母表的闭包

​ Σ* = Σ0 ∪ Σ1 ∪ Σ2 ∪ Σ3 ∪ …

​ 现在包含空串了…

(3). 串

​ 字母表Σ上的闭包称之为Σ上的串,是表中符号的一个有穷序列.

(4). 符号串上的运算

1). 符号串的长度

​ 指符号串中符号的个数,用|X|表示.

例:|aabbb| = 5

2). 符号串的连接

​ 符号串x和y的链接用xy表示.

例:符号串x = ab, y = bc, 则xy = abbc, yx = bcab

3). 符号串的幂运算

​ 符号串x的幂运算就是指数个x的连接.

​ 任何符号串的零次幂都是空串ε.

例:符号串x = ab, 则x^2 = xx = abab

(5). 符号串集合上的运算

1). 符号串集合的乘积运算

​ 很像笛卡尔积,就是两个集合中的符号串两两进行连接操作.

例:符号串集合A={aa,b,ccc}, B={ce,abc}
则:AB = {aace, aaabc, bce, babc, cccce, cccabc}BA = {ceaa, ceb, ceccc, abcaa, abcb, abcccc}

2). 符号串集合的幂运算

​ 就是把符号串的幂运算中符号串的连接换成符号串集合的乘积运算.

例:符号串集合A={a,b,c}
则:A^2 = AA = {aa,ab,ab,ba,bb,bc,ca,cb,cc}
这里A的n次幂就是由A中的符号构成长度为n的所有符号串组成的集合.

3). 符号串集合的闭包

​ 正闭包:A+ = A^1 ∪ A^2 ∪ A^3 ∪…

​ 闭包:A+ = A^0 ∪ A^1 ∪ A^2 ∪ A^3 ∪…(多了一个A^0, 也就是空串ε)

2. 文法定义

(1). 文法

​ 任何程序都可以认为是一定字符集上的一个字符串,而判断一个字符串是否是一个结构上合法的程序就是依据语言的文法.

语言的文法是一组规则,包含词法规则和语法规则.

​ 词法规则:描述语言**单词**构成的规则.语言的单词符号包括表示服,常数,运算符等.词法规则的描述工具通常为正规文法(正规式,有限自动机).

​ 语法规则:描述语言**语法单位**构成的规则.语法单位包括表达式,语句,函数,过程等.语法规则的描述工具通常为:上下文无关文法.

(2). 文法的形式化定义

​ 文法是一个四元组:G[S] = (Vn, Vt, P, S)

​ 其中:Vn是非终结符,就是所有出现在产生式左边的符号,有穷,用大写字母表示

Vt是终结符,是所有符号减去非终结符,有穷,用小写字母,运算符,数字,符号串表示

​ Vn ∩ Vt = ∅ (不会有一个符号既是非终结符也是终结符)

​ Vn ∪ Vt = V* (所有符号)

P为产生式的集合,有穷

S为文法的开始符号,是Vn(非终结符)的一部分

(3).产生式

​ 产生式: A → α, |A| = 1, |α| ≥ 0 (A的长度为1, α的长度任意)

​ 其中:A被称为产生式的左部符号,α为产生式的右部有穷符号串.

​ 产生式的简写:用 | 代表或者

(4). 符号约定

1). 终结符

​ 前面的小写字母,运算符,标点符号,数组,粗体字母

2). 非终结符

​ 前面的大写字母,S(开始符号),小写斜体的名字

3. 语言定义

(1). 推导和规约

​ **推导**就是用产生式的右边反复的替换产生式的左边.

设G=(Vn, Vt, P, S)是给定的文法, x,y,A,B ∈ V*,且A→B属于P

此时符号串 xAy 可以直接产生出符号串 xBy,我们称:

​ 符号串 xBy 是 符号串 xAy 的直接推导

​ 符号串 xAy 是 符号串 xBy 的直接规约

推导和规约是逆过程

​ 直接推导使用=>表示, =>+表示正数步推导, =>*表示若干步推导(可以为0步,也就是不推导)

(2). 句型和句子

​ 如果由一个文法的开始符号可以**推导出符号串a**,那么a是这个文法的句型,(a包含终结符,非终结符或者空串)

​ 如果这个符号串a**只包含终结符**,那么称a是这个文法的句子.通俗一点:在文法的推导过程中,所有出现的式子都是句型,最后一步的结果是句子.

(3). 语言的形式化定义

​ 一个文法G中,由开始符号**推导出的所有句子**构成的集合成为文法G生成的语言,记为L(G).

(4). 语言上的运算

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8s3UzElY-1584183601612)(/home/benjamin/.config/Typora/typora-user-images/1573657365196.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SSHjZaY0-1584183601614)(http://benjaminlee.cn:8989/hello/images/1573657365196.png)]

4. 文法的分类

​ 乔姆斯基将文法分为0型文法,1型文法,2型文法,3型文法.它们之间的关系是拓展,类似数据库概论中的范式

(1). 0型文法

​ 无限制文法

​ ∀a -> b ∈ P, a中至少包含一个非终结符

(2). 1型文法(CSG)

​ 上下文有关文法

​ ∀a -> b ∈ P, |a| ≤ |b|

​ 产生式的一般形式: a1 A b1 -> a1 B b1 (所以上下文有关了)

(3). 2型文法(CFG)

​ 上下文无关文法

​ ∀a -> b ∈ P, a ∈ Vn(推导中只能对单个的非终结符进行替换)

​ 产生式的一般形式:A -> B

(4). 3型文法(RG)

​ 正则文法,又分为右线性文法和左线性文法.

​ 右线性文法: A -> wB | w

​ 左线性文法: A -> Bw | w

5. CFG的分析树

(1). 概念

​ 根节点的标号是文法的开始符号

​ 内部结点表示一个产生式的应用

​ 分析树不唯一

​ 叶节点可以使非终结符也可以是终结符.从左到右排列的所有叶节点成为这棵树的边缘.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Eha8v6g0-1584183601615)(/home/benjamin/.config/Typora/typora-user-images/1568816940499.png)]

​ 如果一个文法可以为某个句子生成多颗分析树,那么这个文法是二义性的.

(2). 短语

​ 对于一个给定的句型,其分析树中的每一颗子树的边缘都成为该句型的一个短语.(当前推导中某个产生式的右部)

​ 如果这个子树的高度仅为2,那么这颗子树的边缘成为该句型的直接短语.

(3). 二义性文法

​ 如果一个文法可以为某个句子生成多颗分析数,则称这个文法是二义性的.

[编译原理]-----第二章 语言及其文法相关推荐

  1. 【编译原理】第二章 语言及其文法

    第二章 语言及其文法 2.1 基本概念 字母表 字母表 ∑ \sum ∑是一个又穷的符号集合,其中符号包括字母.数字和标点符号等 如➢二进制字母表:{ 0,1 } :➢ASCII字符集 :➢Unico ...

  2. 计算机科学与技术第二章ppt,计算机科学与技术-编译原理-第二章重点.ppt

    计算机科学与技术-编译原理-第二章重点.ppt * 自下而上分析法举例 例2解: a b b c d e (1) a b b c d e A A (2) a b b c d e A A (3) a b ...

  3. 编译原理第二章课后习题,文法的二义性判断、语法树以及最左最右推导

    第二章 1.文法G=({A,B,S},{a,b,c}P,S),其中P为S→Ac|aB,A→ab,B→bc 写出L(G[S])的全部元素. 答:L(G[S])={abc} 2.文法G[N]为N→D|ND ...

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

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

  5. 编译原理实验c语言cfg文法,编译原理

    地址在符号表中引入指针previous,来连接上一个符号的首地址运行时存储空间组织活动记录用于管理函数变量的信息栈式存储过程进入和返回通过变更top和sp指针,实现活动记录的栈式处理静态链实现局部变量 ...

  6. 编译原理 | 第二章课后习题答案

    本文为编译原理(第三版)[清华大学出版社]部分课后答案 本答案均截取自网络,如有错误,望指正 编译原理(第三版)[清华大学出版社]

  7. 编译原理 第二章 程序设计语言及其文法

    1.文法:G:S→xSx | y所识别的语言是(x^n y x^n ). 2.给定文法A→bA|ca,为该文法句子的是( bca). 3.设有文法G[S]:S→S1|S0|Sa|Sc|a|b|c,下列 ...

  8. 【第二章 语言及文法】形式语言与自动机第二章个人总结复习笔记分享!(含文件、持续更新...)

    目录 一.总览 二.2.1 [语言的定义与运算] 2.2 [文法] 2.3 [文法的分类] 说明 网盘链接 参考教材 有用的话请点个赞吧,后续有时间会持续更新. 提示:本文内容全是我一人学习总结而来, ...

  9. 编译原理——第二章-最左推导、最右推导以及语法树

    **** 题目 令文法为E->T|E+T|E-T T->F|T*F|T/F F->(E)|i (1)给出i+i*i的最左推导和最右推导 (2)给出i+i*i的语法树 解题过程 最左推 ...

最新文章

  1. 京东方剑指物联网领域
  2. CSCNN:新一代京东电商广告排序模型
  3. sed和awk有什么区别? [关闭]
  4. linux如何运行用户程序,Linux系统下,如何以其他用户身份运行程序
  5. JAVA常见算法题(三十一)---冒泡排序
  6. 湖南警察学院计算机科学与技术专业,湖南警察学院计算机科学与技术专业2015年在福建理科高考录取最低分数线...
  7. bluestacks手机模拟器安装qq或微信时,鼠标左键点聊天编辑框后会自动输入 c 字母
  8. python qt gui与数据可视化编程 pdf_《Python Qt GUI与数据可视化编程》第13章
  9. 【LeetCode】【数组】题号:495,提莫攻击
  10. SQLServer-----SQLServer 2008 R2安装
  11. 离散数学|代数系统(超详细期末复习)
  12. 学习笔记:星火第一讲-使用Apollo 学习自动驾驶
  13. 法拉克机器人自动怎么调_FANUC机器人程序自动启动介绍汇总.ppt
  14. 给kvm虚机开放对外访问的端口
  15. 【Scikit-Learn 中文文档】40 数据集加载工具 - 用户指南 | ApacheCN
  16. C# 异常处理(Catch Throw)IL分析
  17. mysql索引linke和等于_MySQL索引介绍和实战
  18. android spinner,自定义字体大小颜色背景位置
  19. HDU1234 开门人和关门人
  20. Panoply地理网格绘制软件

热门文章

  1. java中double类型_Java中的Double类型计算
  2. Ubuntu13.04下让宏碁Aspire4750G屏幕亮度可调节
  3. 微信小程序预览word,doc,excel文件
  4. x86_64平台SingleStep单步调试原理和示例
  5. js控制文件拖拽,获取拖拽内容
  6. 丰田和软银合作开发自动驾驶汽车相关服务
  7. k8s 动态NFS Subdir External Provisioner
  8. 【项目学习】C++实现高并发服务器——代码学习(二)存储解析HTTP请求报文,创建响应报文
  9. WinForm窗体固定主窗体大小
  10. Taro小程序,底部输入框获取键盘高度动态设置bottom有延迟解决