将正规文法转化为正规式

2023-12-29 09:04
文章标签 转化 文法 正规

本文主要是介绍将正规文法转化为正规式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

将正规文法转化为正规式有以下几个规则:

通过一道例题来讲解:

①A-->aC|bA

②C-->bD

③D-->aC|bD|\varepsilon

(1)首先将②带入③(不能将自身带入自身例如D-->aC|bD|\varepsilon,文法中带D,不能带入D)

D=abD|bD|\varepsilon=(ab|b)D | \varepsilon,所以对应规则2(A-->xA|y),其中"(ab|b)"对应的是x,y对应的是\varepsilon

所以④D=x*y=(ab|b)*\varepsilon=(ab|b)*

(2)继续将②带入①:

⑤A=abD|bA

(3)将④带入⑤:

A=ab(ab|b)*|bA = bA|ab(ab|b)*,同样对应规则2,得到A=b*ab(ab|b)*

所以最后的结果为

A=b*ab(ab|b)*

C=bD

D=(ab|b)*

再来一道例题: 

 S→aA|a

 A→aA|dA|a|d

解如下: 

S = aA|a                

A = (aA|dA)|(a|d)=(a|d)A|(a|d)

由规则二: A = (a|d)*(a|d)

代入得: S = a(a|d)*(a|d)|a = a(a|d)*(a|d)|ε= a(a|d)*

 注:这里(ald)(ald)和(ald)是等价的,因为它们都表示任意多个(a或d)的组合。

这篇关于将正规文法转化为正规式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/549017

相关文章

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

usaco 1.2 Palindromic Squares(进制转化)

考察进制转化 注意一些细节就可以了 直接上代码: /*ID: who jayLANG: C++TASK: palsquare*/#include<stdio.h>int x[20],xlen,y[20],ylen,B;void change(int n){int m;m=n;xlen=0;while(m){x[++xlen]=m%B;m/=B;}m=n*n;ylen=0;whi

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

5.1声道转化为左右声道

5.1声道转化为左右声道downmix http://szfzafa.blog.163.com/blog/static/11895416720120724729214/ 标题: Downmix 5.1ch to 2ch in AVS   最简单: function Dmix6Stereo(clip a) {  # 6 Channels L,R,C,LFE,SL,SR   f

关于字符串转化为数字的深度优化两种算法

最近在做项目,在实际操作中发现自己在VC环境下写的字符串转化为整型的函数还是太过理想化了,或者说只能在window平台下软件环境中运行,重新给大家发两种函数方法: 第一个,就是理想化的函数,在VC环境下充分利用指针的优越性,对字符串转化为整型(同时也回答了某位网友的答案吖),实验检验通过: #include <stdio.h> #include <string.h> int rayatoi(c

通过C语言将文法转化为语言

最近在学习编译原理,在做一道题时,突然产生想法,想通过C语言将文法产生的语言表现出来。   题目如下:   给定文法:S::=aB|bA                     A::=aS|bAA|a                     B::=bS|aBB|b   该文法所产生的语言是什么?   程序如下,可以注意相关的程序注解 #include<stdio.h> #in

正规式与有限自动机例题

答案:D 知识点: 正规式 正规集 举例 ab 字符串ab构成的集合 {ab} a|b 字符串a,b构成的集合 {a,b} a^* 由0或者多个a构成的字符串集合 {空,a,aa,aaa,aaaa····} (a|b)^* 所有字符a和b构成的串的集合 {空,a,b,ab,aab,aba,aaab····} a(a|b)^* 以a为首字符的a,b字符串的集

Oracle之用TO_CHAR函数将日期格式转化为不带前导零的月份和日

要求: 1、日期格式转化成字符串格式,月和日前面的0需要去掉,如日期2024-09-06需要转化成2024-9-6; 2、如果用截取拼接函数写法就会复杂,最好用TO_CHAR函数格式化实现。 正确写法: SELECT TO_CHAR(SYSDATE,'YYYY-fmMM-dd') AS DATE1 , -- 执行结果为 2024-9-6TO_CHAR(SYSDATE,'fmYYYY-MM-d

jks bks 等的定义 如何将jks转化为bks的

接着上一篇,文中提到的android不和java一样识别jks,所以我们要将其转化成bks这里面我们就系统的介绍下到底该如何去生成jks,bks等等 常用的证书密钥库格式: BKS来自BouncyCastleProvider,它使用的也是TripleDES来保护密钥库中的Key,它能够防止证书库被不小心修改(Keystore的keyentry改掉1个bit都会产生错误),BKS能够跟JKS互操