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

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

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

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

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

相关文章

  • 永久解决VSCode终端中文乱码问题

    永久解决VSCode终端中文乱码问题

    这篇文章主要介绍了永久解决VSCode终端中文乱码问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 在github上怎样修改语言设置

    在github上怎样修改语言设置

    这篇文章主要介绍了在github上怎样修改语言设置问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • idea中的project、module、artifact的具体使用

    idea中的project、module、artifact的具体使用

    本文主要介绍了idea中的project、module、artifact的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • IDEA导入Git项目的方法

    IDEA导入Git项目的方法

    这篇文章主要介绍了IDEA导入Git项目的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 使用301永久重定向和302临时重定向作用区别详解

    使用301永久重定向和302临时重定向作用区别详解

    这篇文章主要为大家介绍了301永久重定向和302临时重定向作用详解,
    有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • SonarQube实现自动化代码扫描的安装及使用集成方式

    SonarQube实现自动化代码扫描的安装及使用集成方式

    Sonar是一个用于代码质量管理的开源平台,通过插件机制,Sonar可与第三方工具进行集成。将Sonar引入到代码开发的过程中,提供静态源代码安全扫描能力,这无疑是安全左移的一次很好的尝试和探索
    2021-10-10
  • 搭建一个开源项目两种方式安装git的详细教程

    搭建一个开源项目两种方式安装git的详细教程

    这篇文章主要介绍了搭建一个开源项目两种方式安装git,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 文章中优酷视频全屏及去除广告在线转换

    文章中优酷视频全屏及去除广告在线转换

    很多网站发表了引用优酷视频不能全屏,或一点全屏又跳到官方网了,结果又要重新缓冲。用户体验特别不好。
    2010-09-09
  • transform实现HTML5 video标签视频比例拉伸实例详解

    transform实现HTML5 video标签视频比例拉伸实例详解

    这篇文章主要介绍了transform实现HTML5 video标签视频比例拉伸的相关资料,需要的朋友可以参考下
    2016-09-09
  • 浅析hosts 文件的作用及修改 hosts 文件的方法

    浅析hosts 文件的作用及修改 hosts 文件的方法

    hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的 IP 地址建立一个关联“ 数据库 ”。接下来通过本文给大家介绍hosts 文件的作用及修改 hosts 文件的方法,需要的朋友参考下吧
    2018-01-01

最新评论