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

  • 前言
  • 一、正则文法
    • 1.定义
    • 2.例子
  • 二、正则表达式
    • 1.定义
    • 2.例子
  • 三、转换规则
    • 1.正则文法转换为正则表达式
    • 2.正则表达式转换为正则文法
  • 四、转换例子
    • 1.正则文法转换为正则表达式
    • 2.正则表达式转换为正则文法
  • 总结

前言

在词法分析过程中,如果将每类单词都看作一种语言,则大多数单词词法可以用正则文法来描述。 除了正则文法外,正则表达式也可以相应的用来描述单词,正则文法和正则表达式的能力相同,且可以互相转化。正则表达式比正则文法更直观,有时首选正则表达式来表示正则语言。


一、正则文法

1.定义

正则文法在这篇文章(编译原理-文法的定义与分类)中有所讲解,在此处再稍微讲述一遍:

  1. 正则文法G = (V,T,P,S)中,对∀α —> β∈P,α β均具有形式A —> w或A —> wB(A —> w或A —> Bw),其中A,B∈V,w∈T+。
  2. 正则文法描述T上的正则语言。

2.例子

例子:词法分析中标识符的文法:


二、正则表达式

1.定义

定义:设∑是一个字母表,则∑上的正则表达式及其所表示的正则语言可递归地定义如下:
⑴ Ø是∑上的一个正则表达式,它表示空集;
⑵ ε是∑上的一个正则表达式,它表示语言{ε};
⑶ 对于∀a(a∈∑),a是∑上的一个正则表达式,它表示的正则语言是{a};
⑷ 假设r和s都是∑上的正则表达式,它们表示的语言分别为L®和L(s),则:

  1. ( r )也是∑上的正则表达式,它表示的语言为L( r );
  2. (r|s)也是∑上的正则表达式,它表示的语言为L( r )∪L(s);(并操作)
  3. (r•s)也是∑上的正则表达式,它表示的语言为L( r )L(s);(连接操作)
  4. (r*)也是∑上的正则表达式,它表示的语言为(L( r ))*;(克林闭包操作)

⑸ 使用上述规则构造的表达式是∑上的正则表达式。

2.例子

例子:词法分析中标识符的正则表达式表达:


三、转换规则

1.正则文法转换为正则表达式


具体转换步骤为:

  1. 根据正则文法G构造正则表达式联立方程组。
    假设正则文法G是右线性的,其每个产生式的右部只含有一个终结符,则有如下方程式构造规则:

  2. 解联立方程组,求等价的正则表达式r。
    用代入消元法逐个消去方程组中除开始符号S外的其他变量,最后即可得到关于开始符号S的解。
    代入消元规则如下:

  3. 求得结果。
    如果最后得到的关于S的方程式为如下形式,
    S=α1|α2|…|αh
    则将方程式右边所有其中仍然含有语法变量的αi(1≤i≤n)删除,得到的结果就是与G等价的正则表达式。
    如果任意的αi(1≤i≤n)均含有语法变量,则Ø就是与G等价的正则表达式。

2.正则表达式转换为正则文法

给定正则表达式r,按如下方法构造正则定义式,并逐步将其转换成正则文法。
引入开始符号S,从如下正则定义式开始:
S—>r
按如下规则将S—>r分解为新的正则定义式,在分解过程中根据需要引入新的语法变量。


四、转换例子

1.正则文法转换为正则表达式


过程:

2.正则表达式转换为正则文法

例1.标识符定义的转换:
(1).引入 S
(2).S→ (|)*
(3).分解为
S→ A
A→(|)A|ε

例2.(a|b)*a(a|b)(a|b)

转换成正则文法:
(1).S->Aa|Ab
(2).A->Ba|Bb
(3).B->Ca
(4).C->Ca|Cb|ε


总结

正则表达式与正则文法等价:
对任意一个正则文法,存在一个定义同一语言的正则表达式;
对任意一个正则表达式,存在一个定义同一语言的正则文法。

编译原理-正则文法与正则表达式的相互转化相关推荐

  1. 编译原理--正则文法与正则表达式

    对任何正则文法G,存在定义同一语言的正则表达式r 对任何正则表达式r,存在生成同一语言的正则文法G 正则文法到正则表达式的转换 将正则文法中的每个非终结符表示成关于它的一个正则表达式方程,获得一个联立 ...

  2. java实验文法报告_西安邮电大学编译原理LL文法分析器实验(java).doc

    西安邮电大学编译原理LL文法分析器实验(java) <编译原理>实验报告 题目: 语法分析器的制作 学生姓名: 班 级: 软件1202 学 号: 指导教师: 成 绩: 西安邮电大学计算机学 ...

  3. 编译原理 LL1文法的判断和句子识别

    编译原理 LL1文法的判断和句子识别 LL1文法概述 点击查看百度百科 对文法G的句子进行确定的自顶向下语法分析的充分必要条件是,G的任意两个具有相同左部的 产生式A->α|β 满足下列条件: ...

  4. 编译原理实验 -- 文法分析

    编译原理实验 – 文法分析 终结符 和 非终结符 终结符 通常使用小写字母表示,例如 abcdef 非终结符 通常使用大写字母表示,例如 ABCDEF 产生式 通俗来说,就是由终结符和非终结符组合成的 ...

  5. 编译原理:文法及其二义性(判定及消除)

    (请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 学编译原理时,会学到文法,老师在介绍完文法的相关定义后又 ...

  6. c语言正则表达式_CS143:编译原理|PA2:正则表达式和词法分析

    本文使用 Zhihu On VSCode 创作并发布 这是本人实现斯坦福CS143变编程作业的笔记,对应第二次作业PA2.有关文章目录.环境搭建和一些说明请看第一篇:CS143:编译原理 | 环境搭建 ...

  7. 编译原理——证明文法的二义性(1)

    目录 推导和语法树 推导 语法树 文法二义性 在证明文法的二义性之前,我们需要熟悉几个基本的概念. 推导和语法树 推导 这里的推导,简单的来说就是指根据给出的句型(句子),对文法进行推理变化最终得到句 ...

  8. 编译原理(文法、符号表)

    文法 在计算机科学中,文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法(文法是用于描述语言的语法结构的形式规则). 1个文法 G 是一个四元组 G = (VN , VT , S, P) ...

  9. 编译原理chatpter04 文法的形式和文法的类型

    一文法的形式一般有很多种,只要能正确的描述出终结符非终结符约定.以及开始符号就行 第一种 ②第二种: 二.句型和句子 只要是在整个推到过程的所有符号都是句型: 句子是只含有终结符. 三.四种文法 0型 ...

最新文章

  1. 京东 | AI人才联合培养计划!
  2. UA MATH571B 试验设计III 单因素试验设计3
  3. oracle exchange partition 測试
  4. Git丢弃不要的修改
  5. [心得]Ubuntu無法ssh登入
  6. 桂林理工计算机与科学技术,桂林理工大学信息科学与工程学院
  7. 软件工程——进展记录
  8. MediaMuxer的使用
  9. em在聊天中是什么意思_被神化的EM菌,该怎样正确使用?
  10. 【区块链】量子链命令行qtum-cli全命令详解
  11. Wpa_supplicant 调试故障原因分析
  12. SEO精准搜索流量的玩法
  13. 双十一特辑:Python采集商品数据,实时了解商品价格
  14. python画混淆矩阵 confusion matrix
  15. UltraEdit 27.0.0.24 中文版 — 文本代码编辑工具
  16. 洛谷P1425小鱼的游泳时间【c语言】
  17. ClassNames
  18. 微信小程序如何调用腾讯地图进行定位的简单方法
  19. python中模块是什么意思_Python中的模块是什么?3分钟搞懂Python中的模块问题
  20. 13道字符串笔试题及答案,总有一道你面试会遇上

热门文章

  1. 怎么复制 Windows cmd 窗口命令行的信息
  2. 人工智能学习(十):什么是贝叶斯网络——伯克利版
  3. 第22.6节 性能篇-使用遮档查询来拣选物体
  4. 你真的了解USB吗?USB充电大揭秘(一)
  5. PostgreSQL分区表(partitioning)应用实例
  6. 关于解决google.com搜索跳转到google.com.hk的问题的解决方法
  7. 华为 secoclient_华为Mate40系列国内发布会直播在哪看 Mate40直播观看地址入口
  8. 170901 WarGames-Narnia(7)
  9. Timeunit与sleep
  10. Java架构师学习路线-脑图