㈠ 编译原理-用正则表达式表示下面的内容
(1)[a-z]
(2)^[24680]+$ 所有数字都为偶数 ^(?=[1-9])\d*[02468]$|^[02468]$ 所有偶数
(3)^(?=[a-zA-Z0-9]+).*@[^\.]+\.[a-z]+$
测试有效
㈡ (编译原理) 求下述文法对应正规式: S->0A|1B A->1S|1 B->0S|0
一、简单的推导思路
1、该文法的对应正规式为:[01|10]+
2、推导:
(1)首先,展开产生式S,可知S要么以0开头,要么以1开头;
(2)如果S按产生式S->0A展开,则S必以01开头,因为通过产生式A->1S|1可知,A必定是以1开头的;
(3)如果S按产生式S->1B展开,则S必以10开头,因为产生式B必定以0开头;
(4)综上,可知,S是以01或10开头的非终结符号;
(5)当A以产生式A->1展开或 B以B->0展开时,S将推导结束;
(6)当A以产生式A->1S展开或 B以B->0S展开时,产生式中的非终结符号S将重复(1)-(3)的推导步骤;
(7)综上所述,该文法的对应正规式为:[01|10]+。
二、联立方程组求解
假设非终结符号S、A、B都分别代表一个正规式,则正规文法的产生式集合所代表的就是关于正规式S、A、B的一个方程组。
我们将文法“|”符号替换为正规式“+”符号,可得,
S=0A+1B=0(1S+1)+1(0S+0)=01(S+ε)+10(S+ε)=(01+10)(S+ε)=(01+10)S+(01+10)。
根据方程X=rX+t有形如X=r*t的解论断,可得,
S=(01+10)*(01+10)=[01|10]+。
㈢ 编译原理:写出正规式包含奇数个1或奇数个0的二进制数串
((0*10*)(0*10*))*(0*10*) | ((1*01*)(1*01*))*(1*01*)
通过(AA)*A的方式保证表达式A出现奇数次,此处的A又可以替换成0*10*和1*01*表示只含一个1或0的任意二进制串。综合起来可以满足只出现奇数个1或奇数个0的要求
㈣ 编译原理的正规表达式问题:
我只晓得第三个,(0|1)*(0|1)(0|1)*。前面两个题目都买看懂。。。
㈤ 编译原理:用正则表达式写出被5整除的二进制数
初看这个问题简单,*([0|5])+
但是是二进制啊,NND 老子 从 0 ,5 ,10, ..30,...50 都写成二进制楞是没发现规律
估计是你们老师拿来整你们的吧? 让抄答案都没地方抄。
㈥ 编译原理中的正则表达式与正规表达式有什么区别
完全相同,是对regular expression的不同翻译
㈦ 编译原理与实践中正规表达式的问题
(aa|b)*
由连续两个a或一个b的任意序列组成的语言,比如aab,baaaabbbb.
(a|bb)*
连续两个b或一个a的任意序列。
正则语言里,|表示任选,有时也用+号。*号表示闭包--就是说任意组合。
㈧ 编译原理:c语言标识符的正则表达式
是缺了。这个只能匹配字母开头、字母数字组成的标示符
LZ可以自己加上,加在letter里
㈨ 编译原理中的正规表达式
0+表示至少有一个0
0+10表示010、0010、00010等情形
(0+10)*表示(0+10)的闭包
㈩ 编译原理这个正规表达式是怎么写出来的呀
主要就是后面的两个条件:
至少2个1,
任何2个1之间有偶数个0
abd都不满足第2条