编译原理-正则文法与正则表达式的相互转化
正则文法与正则表达式的相互转化
- 前言
- 一、正则文法
- 1.定义
- 2.例子
- 二、正则表达式
- 1.定义
- 2.例子
- 三、转换规则
- 1.正则文法转换为正则表达式
- 2.正则表达式转换为正则文法
- 四、转换例子
- 1.正则文法转换为正则表达式
- 2.正则表达式转换为正则文法
- 总结
前言
在词法分析过程中,如果将每类单词都看作一种语言,则大多数单词词法可以用正则文法来描述。 除了正则文法外,正则表达式也可以相应的用来描述单词,正则文法和正则表达式的能力相同,且可以互相转化。正则表达式比正则文法更直观,有时首选正则表达式来表示正则语言。
一、正则文法
1.定义
正则文法在这篇文章(编译原理-文法的定义与分类)中有所讲解,在此处再稍微讲述一遍:
- 正则文法G = (V,T,P,S)中,对∀α —> β∈P,α β均具有形式A —> w或A —> wB(A —> w或A —> Bw),其中A,B∈V,w∈T+。
- 正则文法描述T上的正则语言。
2.例子
例子:词法分析中标识符的文法:
二、正则表达式
1.定义
定义:设∑是一个字母表,则∑上的正则表达式及其所表示的正则语言可递归地定义如下:
⑴ Ø是∑上的一个正则表达式,它表示空集;
⑵ ε是∑上的一个正则表达式,它表示语言{ε};
⑶ 对于∀a(a∈∑),a是∑上的一个正则表达式,它表示的正则语言是{a};
⑷ 假设r和s都是∑上的正则表达式,它们表示的语言分别为L®和L(s),则:
- ( r )也是∑上的正则表达式,它表示的语言为L( r );
- (r|s)也是∑上的正则表达式,它表示的语言为L( r )∪L(s);(并操作)
- (r•s)也是∑上的正则表达式,它表示的语言为L( r )L(s);(连接操作)
- (r*)也是∑上的正则表达式,它表示的语言为(L( r ))*;(克林闭包操作)
⑸ 使用上述规则构造的表达式是∑上的正则表达式。
2.例子
例子:词法分析中标识符的正则表达式表达:
三、转换规则
1.正则文法转换为正则表达式
具体转换步骤为:
根据正则文法G构造正则表达式联立方程组。
假设正则文法G是右线性的,其每个产生式的右部只含有一个终结符,则有如下方程式构造规则:
解联立方程组,求等价的正则表达式r。
用代入消元法逐个消去方程组中除开始符号S外的其他变量,最后即可得到关于开始符号S的解。
代入消元规则如下:
求得结果。
如果最后得到的关于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|ε
总结
正则表达式与正则文法等价:
对任意一个正则文法,存在一个定义同一语言的正则表达式;
对任意一个正则表达式,存在一个定义同一语言的正则文法。
编译原理-正则文法与正则表达式的相互转化相关推荐
- 编译原理--正则文法与正则表达式
对任何正则文法G,存在定义同一语言的正则表达式r 对任何正则表达式r,存在生成同一语言的正则文法G 正则文法到正则表达式的转换 将正则文法中的每个非终结符表示成关于它的一个正则表达式方程,获得一个联立 ...
- java实验文法报告_西安邮电大学编译原理LL文法分析器实验(java).doc
西安邮电大学编译原理LL文法分析器实验(java) <编译原理>实验报告 题目: 语法分析器的制作 学生姓名: 班 级: 软件1202 学 号: 指导教师: 成 绩: 西安邮电大学计算机学 ...
- 编译原理 LL1文法的判断和句子识别
编译原理 LL1文法的判断和句子识别 LL1文法概述 点击查看百度百科 对文法G的句子进行确定的自顶向下语法分析的充分必要条件是,G的任意两个具有相同左部的 产生式A->α|β 满足下列条件: ...
- 编译原理实验 -- 文法分析
编译原理实验 – 文法分析 终结符 和 非终结符 终结符 通常使用小写字母表示,例如 abcdef 非终结符 通常使用大写字母表示,例如 ABCDEF 产生式 通俗来说,就是由终结符和非终结符组合成的 ...
- 编译原理:文法及其二义性(判定及消除)
(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 学编译原理时,会学到文法,老师在介绍完文法的相关定义后又 ...
- c语言正则表达式_CS143:编译原理|PA2:正则表达式和词法分析
本文使用 Zhihu On VSCode 创作并发布 这是本人实现斯坦福CS143变编程作业的笔记,对应第二次作业PA2.有关文章目录.环境搭建和一些说明请看第一篇:CS143:编译原理 | 环境搭建 ...
- 编译原理——证明文法的二义性(1)
目录 推导和语法树 推导 语法树 文法二义性 在证明文法的二义性之前,我们需要熟悉几个基本的概念. 推导和语法树 推导 这里的推导,简单的来说就是指根据给出的句型(句子),对文法进行推理变化最终得到句 ...
- 编译原理(文法、符号表)
文法 在计算机科学中,文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法(文法是用于描述语言的语法结构的形式规则). 1个文法 G 是一个四元组 G = (VN , VT , S, P) ...
- 编译原理chatpter04 文法的形式和文法的类型
一文法的形式一般有很多种,只要能正确的描述出终结符非终结符约定.以及开始符号就行 第一种 ②第二种: 二.句型和句子 只要是在整个推到过程的所有符号都是句型: 句子是只含有终结符. 三.四种文法 0型 ...
最新文章
- 京东 | AI人才联合培养计划!
- UA MATH571B 试验设计III 单因素试验设计3
- oracle exchange partition 測试
- Git丢弃不要的修改
- [心得]Ubuntu無法ssh登入
- 桂林理工计算机与科学技术,桂林理工大学信息科学与工程学院
- 软件工程——进展记录
- MediaMuxer的使用
- em在聊天中是什么意思_被神化的EM菌,该怎样正确使用?
- 【区块链】量子链命令行qtum-cli全命令详解
- Wpa_supplicant 调试故障原因分析
- SEO精准搜索流量的玩法
- 双十一特辑:Python采集商品数据,实时了解商品价格
- python画混淆矩阵 confusion matrix
- UltraEdit 27.0.0.24 中文版 — 文本代码编辑工具
- 洛谷P1425小鱼的游泳时间【c语言】
- ClassNames
- 微信小程序如何调用腾讯地图进行定位的简单方法
- python中模块是什么意思_Python中的模块是什么?3分钟搞懂Python中的模块问题
- 13道字符串笔试题及答案,总有一道你面试会遇上
热门文章
- 怎么复制 Windows cmd 窗口命令行的信息
- 人工智能学习(十):什么是贝叶斯网络——伯克利版
- 第22.6节 性能篇-使用遮档查询来拣选物体
- 你真的了解USB吗?USB充电大揭秘(一)
- PostgreSQL分区表(partitioning)应用实例
- 关于解决google.com搜索跳转到google.com.hk的问题的解决方法
- 华为 secoclient_华为Mate40系列国内发布会直播在哪看 Mate40直播观看地址入口
- 170901 WarGames-Narnia(7)
- Timeunit与sleep
- Java架构师学习路线-脑图