高分求正规表达式(a|b)*abb的C语言实现
即判断一个字符串是不是由a和b组成,并且最后为abb.
本人在自学<<编译原理>>,自学的难度实在是大.虽然书中提供了算法,但对于我来说用C语言来实现很有难度.所以求代码来瞧瞧,以便于自己实现其它的正规表达式.
要有NFA的建立和转换成DFA的过程.
若没有的话,就不用帖,因为可以用case语句。。。。。
问题点数:100、回复次数:20Top
1 楼guyanhun(老婆说的都是对的!努力做个好老公!)回复于 2005-12-09 20:54:56 得分 9
帮你顶。没学编译原理先 ~~Top
2 楼cunsh(村少)回复于 2005-12-09 21:34:08 得分 9
呵呵.楼主是引生呀?Top
3 楼fiftymetre(50米深蓝)回复于 2005-12-09 21:58:49 得分 28
写代码这种事真烦啊,唉
给你写好了,看看吧
#include <stdio.h>
#include <stdlib.h>
int check(char *src)
{
int len = strlen(src);
if (len < 3)
{
return 0;
}
if (strcmp(src+len-3, "abb"))
{
return 0;
}
while (*src)
{
if (*src != 'a' && *src != 'b')
{
return 0;
}
src++;
}
return 1;
}
int main()
{
printf("%d\n", check("abb"));
printf("%d\n", check("aabb"));
printf("%d\n", check("aaab"));
printf("%d\n", check("cabb"));
return 0;
}Top
4 楼sms88(白板http://shop34112882.taobao.com)回复于 2005-12-09 22:21:06 得分 0
判断一个字符串是不是由a和b组成,并且最后为abb.这个是很容易.但是关键的是编译原理中的NFA和DFA啊
要有NFA的建立和转换成DFA的过程.Top
5 楼fiftymetre(50米深蓝)回复于 2005-12-09 22:31:46 得分 5
早忘光了Top
6 楼Mr_Yang(初级程序员)回复于 2005-12-09 23:08:01 得分 5
markTop
7 楼jsjgirl(从前有座山,山上有座庙)回复于 2005-12-09 23:13:02 得分 9
呵呵,同路中人,我这段时间也在凭兴趣在重温<编译原理>,书中也是拿(a|b)*abb做典型,不过是pascal实现. 有可执行的代码.Top
8 楼Kenmark(fenix)回复于 2005-12-10 13:58:30 得分 5
不爽,为什么偏要用C,用C++不就简单多了吗???Top
9 楼sms88(白板http://shop34112882.taobao.com)回复于 2005-12-10 17:53:32 得分 0
用C++简单?
我倒是不觉得Top
10 楼f_acme(沧海一声笑)回复于 2005-12-10 18:44:47 得分 5
小弟顺便问个问题:
假设只有a和b组成的字符串,该字符串有奇数个a和偶数个b,请问怎么用正则表达式表示呢?Top
11 楼Kenmark(fenix)回复于 2005-12-10 20:40:15 得分 5
用C++可以用REGEX库,而且就C++的TEMPLATE和类的支持来说用C++做正则的处理更加方便Top
12 楼sms88(白板http://shop34112882.taobao.com)回复于 2005-12-11 18:01:32 得分 0
upTop
13 楼sms88(白板http://shop34112882.taobao.com)回复于 2005-12-12 16:11:43 得分 0
我再顶几天Top
14 楼pankun(剑神一笑 Console下面干革命)回复于 2005-12-12 19:32:04 得分 5
用子集构造法,龙书有讲.
另外f_acme(沧海一声笑)的问题无法用正则表达式表示.Top
15 楼sms88(白板http://shop34112882.taobao.com)回复于 2005-12-12 20:56:35 得分 0
我是实现不了子集构造法Top
16 楼ctu_85(青灯照壁人初睡,冷雨敲窗被未温)回复于 2005-12-12 21:37:44 得分 5
呵呵
代码做到后面词法分析很简单
语法编译器就难多了
我们去年一个宿舍做了1个星期Top
17 楼sms88(白板http://shop34112882.taobao.com)回复于 2005-12-12 21:38:42 得分 0
怎么就到了 非技术区 了
什么意思这是???Top
18 楼bohemia(程勘)回复于 2005-12-12 21:58:56 得分 5
对啊,好好学些正规表达式图的画法,从图到程序 或许容易些.不过大部分程序和图有很大区别.Top
19 楼DiabloWalkOnTheEarth(我想到个绝妙的昵称,只是地方太小,写不下)回复于 2005-12-13 08:48:17 得分 5
正则还是 C 比 C++ 方便多了, yacc , lex 生成的代码也是 C 地, 唉 ...Top
20 楼sms88(白板http://shop34112882.taobao.com)回复于 2005-12-15 21:00:40 得分 0
upTop




