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

 更新时间: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型语言

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

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

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

相关文章

  • 绑定/约束 (binding)指两个东西之间的关联

    绑定/约束 (binding)指两个东西之间的关联

    绑定/约束 (binding)指两个东西之间的关联。如 名字 与它所代表的事物。又如属性与实体之间的关联,又或者符号与操作之间的关联。
    2011-01-01
  • Unity中webgl使用避雷要素指南

    Unity中webgl使用避雷要素指南

    这篇文章主要介绍了Unity中webgl使用过程中会踩过的坑,以及如何解决这些问题,有需要的朋友可以借鉴参考下,希望可以对广大读者朋友能够有所帮助
    2021-09-09
  • IDEA导入Git项目的方法

    IDEA导入Git项目的方法

    这篇文章主要介绍了IDEA导入Git项目的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Web 开发常用工具 大家自己查找下载

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

    看到了Web通信分析工具 这篇文章,除了burpsuite其他我日常都经常使用。于似乎我整理了一下我自己用的其他的WEB开发工具。
    2009-06-06
  • 使用openssl实现私有CA的搭建和证书的颁发

    使用openssl实现私有CA的搭建和证书的颁发

    这篇文章主要介绍了使用openssl实现私有CA的搭建和证书的颁发,使用openssl搭建私有CA,openssll和私有CA搭建相关的配置文件,里面包含了很多和证书相关的设置,后续创建对应文件的时候需要根据配置文件中的信息进行创建,需要的朋友可以参考下
    2022-10-10
  • 一个批量编码转换及ASP/JS加解密/简繁转换的工具

    一个批量编码转换及ASP/JS加解密/简繁转换的工具

    一个批量编码转换及ASP/JS加解密/简繁转换的工具...
    2007-05-05
  • vscode设置多行展示文件标签的操作方法

    vscode设置多行展示文件标签的操作方法

    这篇文章主要给大家介绍了vscode设置多行展示文件标签的操作方法,文中通过图文结合的方式给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-12-12
  • Web 设计与开发者必须知道的 15 个站点

    Web 设计与开发者必须知道的 15 个站点

    今天读到一篇文章,介绍了15个对 Web 设计与开发师极端有用的站点,里面有不少也是我们一直在使用的,也许对很多人都有用,翻译出来以饷同仁。
    2009-08-08
  • 获取目录下所有文件名的代码

    获取目录下所有文件名的代码

    获取目录下所有文件名的代码,需要的朋友可以参考下。
    2011-07-07
  • 使用Git进行版本控制的实践分享

    使用Git进行版本控制的实践分享

    Git 是目前最流行的分布式版本控制系统,广泛应用于前端开发,Git的强大功能让开发者能够有效管理代码、协作开发、追踪代码变更和版本发布,在本文中,我们将探讨前端开发者在使用 Git 进行版本控制时应遵循的一些最佳实践,需要的朋友可以参考下
    2024-10-10

最新评论