ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

文法与语言(笔记版)

2021-12-12 12:33:33  阅读:192  来源: 互联网

标签:文法 终结符 语言 笔记 规则 集合 型文法 符号串


一、前言

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


二、文法与语言

字母表:

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

符号串:

由字母表上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型文法来描述的。

标签:文法,终结符,语言,笔记,规则,集合,型文法,符号串
来源: https://blog.csdn.net/weixin_48627356/article/details/121885209

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有