详解文法的定义与分类(编译原理)

 更新时间:2023年08月02日 11:40:04   作者:xigama  
计算机的语言具有严格的语法、语义,易于形式化的特征,这篇文章主要介绍了详解文法的定义与分类(编译原理),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

编译原理-文法的定义与分类

前言

语言是一定的群体用来信息交流的工具 ,而信息交流的基础是需要按照共同约定的生成规则理解规则去生成句子和理解句子。计算机的语言具有严格的语法、语义,易于形式化的特征。程序设计语言经过形式化提取后可以得到以下内容:

程序设计语言(Programming Language):组成程序的所有语句的集合。

程序(Program):满足语法规则的语句序列。

语句(Sentence) :满足语法规则的单词序列。

单词(Token) :满足词法规则的字符串。

语言的描述形式——文法,对于单词和语句有不同的概念:

词法——单词
单词的组成规则
描述方法:BNF范式、正规式

语法——语句
语句的组成规则
描述方法:BNF范式、语法(描述)图

一、文法的定义

以赋值语句为例,首先进行如下四个定义:
非终结符号集V =
{<赋值语句>,<左部量>,<右部表达式>,<简单变量>,<下标变量>,<运算符>}
终结符号集T =
{a , b, c, m[1], m[2], m[3], +, -}
语法规则集P =
{<赋值语句> —> <左部量>=<右部表达式> ,……}
开始符号S = <赋值语句>

按照上述定义,则文法G的形式化定义为诶一个四元组:

G=(V,T,P,S)

V:非终结符(Variable )集
每个非终结符称为一个语法变量(成分)——代表某个语言的各种子结构。

T:终结符(Terminal)集。
语言的句子中出现的字符,V∩T = 空集

S:开始符号(Start Symbol),S∈V
代表文法所定义的语言,至少在产生式左侧出现一次。

P:产生式(Product)集合。

二、文法的分类

根据语言结构的复杂程度(形式语言)(涉及文法的复杂程度、分析方法的选择、反映文法描述语言的能力)可以分为以下四种语言:
0型文法 (即:短语结构文法)
1型文法 (即:上下文有关文法)
2型文法 (即:上下文无关文法)
3型文法 (即:正规文法)

0.短语结构语言(PSL)

如果G满足文法定义的要求,则G是0型文法(短语结构文法PSG: Phrase Structure Grammar )。

1.上下文有关文法(CSG)

如果对于任意α —>β∈P,均有 **|β|≥|α|**成立,则称G为1型文法。即:上下文有关文法(CSG——Context Sensitive Grammar)

2.上下文无关文法(CFG)

如果对于任意α —>β∈P,均有|β|≥|α|,并且α∈V成立,则称G为2型文法,即:上下文无关文法(CFG: Context Free Grammar)(CFG能描述程序设计语言的多数语法成分)。

3.正规文法(RG)

设A、B∈V,a∈T+
右线性(Right Linear)文法:A→aB或A→a
左线性(Left Linear)文法:A→Ba或A→a
都是3型文法(正规文法 Regular Grammar -RG)
其中左线性文法和右线性文法等价,只是识别句子的方向不同。

正规文法与正则表达式的相互转化.

三、判断以下文法的类别

G1: S —> 0 | 1 | 00 | 11 (正则文法)
G2: S —> A | B | AA | BB, A —> 0, B —> 1 (上下文无关文法)
G3: S —> 0 | 1 | 0A | 1B, A —> 0, B —> 1 (正则文法)
G4: S —> A | B | BC, A —> 0, B —> 1,C —> 21, C —> 11, C—> 2 (上下文无关文法)
G5: S —> 0 | 0S (正则文法)
G6: S —> ε | 0S (短语结构文法)
G7: S —> ε | 00S111 (短语结构文法)
G8: A —> aS | bS | cS | a | b | c (正则文法)
G9: S —> 0A | 1B | 2C | 0SA | 1SB | 2SC
0A —> A0 1A —> A1
2A —> A2 0B —> B0
1B —> B1 2B —> B2
0C —> C0 1C —> C1
2C —> C2
(上下文有关文法)
G10: S —> aT | bT | cT
T —> ε | a | b | c | 0 | 1 | 2 | 3 | aT | bT | cT | 0T | 1T | 2T | 3T (短语结构文法)

总结

G = (V,T,P,S)是一个文法,α→β ∈ P

  • G是0型文法,L(G)是0型语言;
  • |α|≤|β|:G是1型文法,L(G)是1型语言(除S→ε);
  • α∈V : G是2型文法,L(G)是2型语言;
  • A→aB或A→a: G是右线性文法,L(G)是3型语言
    A→Ba或A→a : G是左线性文法,L(G)是3型语言

四种文法之间的关系是将产生式作进一步限制而定义的。

四种文法之间的逐级“包含”关系如下:

到此这篇关于详解文法的定义与分类(编译原理)的文章就介绍到这了,更多相关文法的定义与分类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • IDEA中git撤回上一次push的方法(指定回到某个版本)

    IDEA中git撤回上一次push的方法(指定回到某个版本)

    这篇文章主要介绍了IDEA中git撤回上一次push(指定回到某个版本),本文通过场景图文的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 算法系列15天速成 第十一天 树操作(上)

    算法系列15天速成 第十一天 树操作(上)

    我们可以对”线性结构“改造一下,变为”一个节点最多有一个"前驱“和”多个后继“。哈哈,这就是我们今天说的”树“
    2013-11-11
  • 使用swipe方法模拟屏幕滑动与手势密码绘制

    使用swipe方法模拟屏幕滑动与手势密码绘制

    这篇文章主要介绍了使用swipe方法模拟屏幕滑动与手势密码绘制 ,本文通过实力代码,图文效果的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • 基于HTTP协议的一些实时数据获取技术详解

    基于HTTP协议的一些实时数据获取技术详解

    HTTP 协议是一个标准,定义了web客户端如何与服务器对话,以及数据如何从服务器传回客户端,下面这篇文章主要给大家介绍了关于基于HTTP协议的一些实时数据获取技术的相关资料,需要的朋友可以参考下
    2018-07-07
  • 如何在Unity中使用VR暴风魔镜蓝牙手柄

    如何在Unity中使用VR暴风魔镜蓝牙手柄

    鉴于某些手机在使用大朋SDK以及谷歌SDK时会出现神器的小屏现象(比如某想的)故为了能够最大程度的兼容更多的手机,决定使用暴风魔镜的SDK。废话不多说直接将使用暴风魔镜SDK时遇到的问题以及解决方案简单的罗列一下
    2021-09-09
  • git pull和git clone的区别详解

    git pull和git clone的区别详解

    本文主要介绍了git pull和git clone的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 分享最新Sublime Text4 Build 4107注册码(密钥)汉化及完美永久破解方法

    分享最新Sublime Text4 Build 4107注册码(密钥)汉化及完美永久破解方法

    分享一个适用最新Sublime Text4 Build 4107注册码(密钥)及Sublime Text 4完美永久破解方法,需要的朋友可以参考下
    2021-05-05
  • Web 开发常用工具 大家自己查找下载

    Web 开发常用工具 大家自己查找下载

    看到了Web通信分析工具 这篇文章,除了burpsuite其他我日常都经常使用。于似乎我整理了一下我自己用的其他的WEB开发工具。
    2009-06-06
  • 关于Typora中latex的用法与常用语法

    关于Typora中latex的用法与常用语法

    这篇文章主要介绍了关于Typora中latex的用法与常用语法,typora使用latex进行公式的编写,本文说明了常用的语法,需要的朋友可以参考下
    2023-04-04
  • openlayers 模仿高德箭头导航路线图的代码详解

    openlayers 模仿高德箭头导航路线图的代码详解

    这篇文章主要介绍了openlayers 模仿高德箭头导航路线图的示例代码,主要包括原始数据、起点/终点寻找、起点和终点样式函数,结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05

最新评论