本次笔记内容:
2-1 词法语法分析基本概念
2-2 文法定义
2-3 语言的定义
2-4 文法的分类
2-5 CFG的分析树

文章目录

  • 概述:计算机如何表示语言及其文法
    • 字母表(Alphabet)
    • 字母表上的运算
      • 字母表的乘积(product)
      • 字母表的n次幂(power)
      • 字母表的正闭包(positive closure)
      • 字母表的克林闭包(Kleene closure)
    • 串(String)
    • 串上的运算
      • 连接(concatenation)
  • 文法的定义
    • 自然语言例子
    • 文法的形式化定义
    • 产生式的简写
    • 符号约定
  • 文法的定义
    • 推导(Derivations)和归约(Reductions)
    • 句型(sentential form)和句子(sentence)
    • 语言的形式化定义
    • 语言上的运算
  • 文法的分类(Chomsky文法分类体系)
    • 0型文法(Type-0 Grammar)
    • 1型文法(Type-1 Grammar)
    • 2型文法(Type-2 Grammar)
    • 3型文法(Type-3 Grammar)
    • 四种文法之间的关系
  • CFG的分叙述
    • 分析树是推导的图形化表示
    • (句型的)短语
    • 二义性文法(Ambiguous Grammar)
    • 二义性文法的判断

概述:计算机如何表示语言及其文法

编译器对高级程序设计语言进行词法、语法等分析,在计算机中,如何表示语言及其文法?

字母表(Alphabet)

字母表∑\sum∑是一个有穷符号集合,符号可以是字母、数字、标点符号等等。

字母表例如:

  • 二进制字母表:{0,1};
  • ASCII字符表;
  • Unicode字符集。

字母表上的运算

字母表的乘积(product)

如上图,按照我的理解,这是一种笛卡尔积(数据库中学过)。

字母表的n次幂(power)

如上图,字母表的n次幂,就是长度为n的符号串构成的集合。这里,n可以等于0,即空串(ϵ\epsilonϵ)

字母表的正闭包(positive closure)

如上图,正闭包是各个整数次幂的并集。

字母表的克林闭包(Kleene closure)

如上图,字母表的克林闭包是正闭包加空串。

串(String)

如上图,串是字母表中符号的一个有穷序列。长度可以为0。

串上的运算

连接(concatenation)

对于串x和y,连接x和y就是把y放在x后,即xy。

如上图,空串具有连接的特殊性质,称为连接的单位元(identity)。同时注意前缀后缀的定义。

如果把连接看做乘积,则提出幂运算。

如上图,要注意s的0次幂即空串。

文法的定义

自然语言例子

如上图,句子的构成是层层递进的关系。

文法的形式化定义

G=(VT,VN,P,S)G=(V_T,V_N,P,S)G=(VT​,VN​,P,S),其中:

VTV_TVT​是终结符集合,终结符(terminal symbol)是文法所定义的语言的基本符号,有时也称为token,例如

VT=apple,boy,eat,littleV_T = {apple, boy, eat, little} VT​=apple,boy,eat,little

VNV_NVN​是非终结符集合,非终结符(nonterminal)用来表示语法成分的符号,有时也称为“语法变量”,例如

VN=<句子>,<名词短语>,<动词短语>,<名词>,...V_N={<句子>, <名词短语>, <动词短语>, <名词>, ...}VN​=<句子>,<名词短语>,<动词短语>,<名词>,...

  • VT∩VN=ΦV_T \cap V_N = \PhiVT​∩VN​=Φ
  • VT∪VNV_T \cup V_NVT​∪VN​ 是文法符号集,因为二者统称为文法符合。

PPP是产生式集合,产生式(production)描述了将终结符和非终结符组合成串的方法。产生式的一般形式为α→β\alpha \to \betaα→β,读作α\alphaα定义为β\betaβ。

  • α∈(VT∪VN)+\alpha \in (V_T \cup V_N)^+α∈(VT​∪VN​)+,且α\alphaα中至少包含VNV_NVN​中的一个元素:称为产生式的头部(head)或左部(left side)。
  • β∈(VT∪VN)∗\beta \in (V_T \cup V_N)^*β∈(VT​∪VN​)∗,称为产生式的体(body)或右部(right side)。

产生式集合的例子如上图。

SSS是开始符号,S∈VNS \in V_NS∈VN​,开始符号(start symbol)表示的是该文法中最大的语法成分。

例如,S=<句子>S=<句子>S=<句子>。

如上图,是一个简化版本的,用来表示算数表达式的文法。终结符集合中包括id(标识符)等。E表示表达式Expression。由于这是一个描述表达式的文法,因此表达式就是这个文法的最大成分,因此E就是起始符号。

产生式的简写

如上图,候选式以算数表达式为例。

符号约定

如上图,其中,文法符号既可以表示终结符,又可以表示非终结符。

文法的定义

有了文法(语言规则),如何判断一个词串是否满足文法的句子?

引出推导和归约概念。

推导(Derivations)和归约(Reductions)

直接推导的定义如上图。

如上图,阿尔法经过0步推导得到的还是阿尔法;直接推导的正闭包表示“经过正数步推导”;直接推导的克林闭包表示“经过若干(可以是0)步推导”。

前面的定义不够直观,例子如上图,推导和归约较为直观地显示出来。

句型(sentential form)和句子(sentence)

如上图,句型和句子按照自然定义理解就好。在杠杠的例子中只有最后一个“little boy eats apple”是句子。

语言的形式化定义

由文法G的开始符号S推导出的所有句子构成的集合称为文法G生成的语言,记为L(G)L(G)L(G)。即L(G)={w∣S⇒∗w,w∈VT∗}L(G) = \{w|S \Rightarrow ^* w, w \in V_T^* \}L(G)={w∣S⇒∗w,w∈VT∗​}

例子如上图,可见,文法G就是标识符的文法。先看D,D表示的是数字,L表示的是小写字母,而S表示,必须是小写字母开头。

语言上的运算

如上图,语言的运算同一个道理。

文法的分类(Chomsky文法分类体系)

0型文法(Type-0 Grammar)

α→β\alpha \to \betaα→β

  • 无限制文法(Unrestricted Grammar)/短语结构文法(Phrase Structure Grammar)
  • ∀α → β ∈P, α中至少包含 1个非终结符
  • 0型语言,由0型文法G生成的语言L(G )。

1型文法(Type-1 Grammar)

α→β\alpha \to \betaα→β

如上图,阿尔法的字符数必须小于贝塔。在产生式的一般形式中,能否表示是与alpha_1、2相关的,因此叫“上下文相关(Context-Sensitive Grammar,CSG)”。并且,因为阿尔法大于等于1,因此贝塔不能去空串。

2型文法(Type-2 Grammar)

如上图,上下文无关文法(Context-Free Grammar,CFG)。

2型语言如上图。

3型文法(Type-3 Grammar)

如上图,3型文法是正则文法(Regular Grammar,RG),分为右线性(Right Linear)文法和左线性(Left Linear)文法。

上图中蓝色、黄色两种文法定义方式效果相同。

正则语言(3型语言)是由正则文法(3型文法)G生成的语言L(G),正则文法能描述程序设计语言的多数单词。

四种文法之间的关系

如上图,各级文法是逐级限制的关系。

CFG的分叙述

正则文法可以用来描述大多数单词,但是没法描述程序构成语言的句子构造。因此选择上下文不相干树。

如上图,根结点表示的是产生式③的左部。

分析树是推导的图形化表示

如上图,当只进行到E⇒−EE \Rightarrow - EE⇒−E时,分析树也只有一个根结点和两个叶子结点(产出yield或叫边缘frontier)。以此类推。

(句型的)短语

  • 给定一个句型,其分析树中的每一棵子树的边缘称为该句型的一个短语(phrase);
  • 如果子树只有父子两代结点,那么这棵子树的边缘称为该句型的一个直接短语(immediate phrase)。

如上图,直接短语一定是某产生式的右部(按照我的理解,是因为产生式的右部相当于一种基本变化);但是产生式的右部不一定是给定句型的直接短语(即产生式未必完全显露)。例子见下。

如上图,“高人”等虽然为产生式的右部,但是不一定是分析树的直接短语。

二义性文法(Ambiguous Grammar)

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

如上图,该文法是二义性的。二义性不好,因此要引入终结符或消歧规则来去掉二义性。

这里,引入的规则是每个else和最近的尚未匹配的if匹配。

二义性文法的判断

对于人意一个上下文无关的文法,不存在一个算法,判定它是无二义性的;但能给出一组充分条件,满足这组充分条件的文法是无二义性的。

  • 满足,肯定无二义性;
  • 不满足,也未必就有二义性。

【编译原理笔记02】计算机如何表示语言及其文法,字母表(及其运算)、串、推导和归约、句型和句子、文法分析树相关推荐

  1. 用c++自制词法分析器_编译原理笔记 02 词法分析

    # 词法分析 ## 主要任务 从左向右逐行扫描源程序的字符,识别出各个单词,确定单词的类型.将识别的单词转换成统一的机内表述---词法单元(token)形式 ## 词法分析的状态转换图 图片来源: 编 ...

  2. 编译原理笔记(二)之词法分析

    编译原理笔记(二)之词法分析 1. 词法分析中的若干问题 1.1 基本概念 1.2 记号的属性 1.3 词法分析器的作用与工作方式 1.4 输入缓冲区 2. 模式的形式化描述 2.1 字符串与语言 2 ...

  3. zucc 编译原理 笔记

    zucc 编译原理 笔记 lec02 lec03 lec04

  4. 编译原理拉链回填技术c语言,编译原理笔记1:概述编译相关的基本知识

    本系列为个人编译原理学习笔记,谬误之处恳请高人指点,感激不尽! 内容整理自西安电子科技大学 王小兵.张南.鱼滨老师的编译原理课程. 编译器的工作步骤 在开始说任何东西之前,我们先来大致看一下编译器是怎 ...

  5. 【编译原理笔记01】什么是编译,编译系统各结构作用

    资源Bilibili AV17649289 编译原理 哈尔滨工业大学 陈鄞 本次笔记内容: 1-1 什么是编译 1-2 编译系统的结构 1-3 词法分析 1-4 语法分析概述 1-5 语义分析概述 1 ...

  6. 编译原理笔记 导言和目录

    本学期编译原理的学习也差不多快结束了,在学习过程中也做了不少笔记. 为了准备即将来到的考试,我想把学习笔记再整理一遍.借此机会创建了这个专栏--为了满足创建专栏之前必须发布15篇以上的原创文章,我还特 ...

  7. 编译原理视角下的 c c 语言左值教学,西安交通大学18年3月课程考试《编译原理》作业考核试题...

    Q.微信均是1219895388,Q:1219895388 联系:QQ:576696131 西安交通大学18年3月课程考试<编译原理>作业考核试题 共题,总分:100分 答题中 分 一.单 ...

  8. 了解编译原理-笔记小结

    这是之前学习编译原理过程中做下的笔记. 因能力有限,在很多地方都理解不到位,特别是对于词法分析与语法分析的过程感觉特别晦涩. 分享这个笔记也是为了自己做个总结,算是一个小的提纲吧,都没怎么深入解析编译 ...

  9. 编译原理笔记3 词法分析 龙书

    正则表达式(Regular Expression,RE) 啥是正则表达式//比较简单略写- 正则表达式(Regular Expression,RE) 是一种用来描述正则语言(3型语言)的更紧凑的表示方 ...

最新文章

  1. ssm注解配置连接mysql_SSM框架整合(注解)-Spring+SpringMVC+MyBatis+MySql
  2. 微信小程序开发-微信登陆流程
  3. 放心了!邮政、顺丰和京东基本全部复工
  4. FastJson(阿里巴巴)基础
  5. 主板在计算机系统中的应用,浅谈主板在计算机硬件系统中的重要性.doc
  6. 页面PDF预览控件pdf.js使用总结
  7. Linux CentOS安装增强功能--完整版命令
  8. 2022“杭电杯”中国大学生算法设计超级联赛(5)杭电多校第五场
  9. 【渝粤题库】广东开放大学 电算化会计 形成性考核
  10. Mac电脑进入恢复模式详细教程
  11. myd文件 php项目,MYSQL表引擎与文件.frm,.myd,.myi
  12. Python大数据分析与挖掘实战微课版答案 Python大数据分析与挖掘实战课后答案 例题 课后作业 python题目 python题库 数据分析与挖掘题库 数据分析与挖掘项目
  13. 【沃顿商学院学习笔记】商业分析——Customer Analytics:01 描述性分析 Descriptive Analytics
  14. 【机器视觉】 dev_get_preferences算子
  15. 【菜鸟进阶之路】P5461 赦免战俘 题解笔记(持更)
  16. 时间序列分析-预测Apple股票价格
  17. 全自动模拟布局设计的挑战和机遇
  18. 专题总纲目录 PMP总纲
  19. 02【ArcGIS Pro SDK for Microsoft .NET】开发实现登录页面
  20. 2021年最新ABAQUS复合材料建模仿真与应用

热门文章

  1. linux 64 mysql下载官网_Linux下安装MySQL5.7
  2. 【Oracle】RAC中控制文件多路复用
  3. 【Oracle】解决oracle sqlplus 中上下左右backspace不能用
  4. System.Security.Cryptography.RSA.FromXmlString 系统找不到指定的文件和X509读取证书文件系统找不到指定的文件异常
  5. 安装pytest时遇到的问题及解决方案
  6. PHP XAMPP windows环境安装扩展redis 致命错误: Class ‘Redis‘ not found解决方法
  7. axios请求中跨域及post请求问题解决方案
  8. Connection reset原因分析和解决方案
  9. 如何使用C#调用REST api?
  10. 不推荐使用getResources()。getColor()[重复]