BBS.ChinaUnix.net
今日推荐    首页 | 新闻 | Linux | AIX | 博客 | 论坛 | 存储 | 人才 | 培训 | 知识库 | 资料 | 读书 | 手册 | 精华 | 下载 | 空间     
  会员: 密码: 免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


毕设进行中,请大家给建议!
首页 » 论坛 » C/C++ »  
[打印] [订阅] [收藏] [推荐给朋友] [本帖文本页]
jigloo
精灵王




UID:514114
注册:2007-1-4
最后登录: 2008-07-04
帖子:326
精华:0

可用积分:305
信誉积分:100
专家积分:5 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
21楼 发表于 2008-4-30 19:21 
一个轻量的Parser, sqlite和lighttpd也用它。
http://www.hwaci.com/sw/lemon/



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

该用吸时就用吸, 该用吸佳佳时就用吸佳佳。
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
anank
圣骑士



UID:551998
注册:2007-4-15
最后登录: 2008-05-24
帖子:149
精华:0

可用积分:117
信誉积分:165
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
22楼 发表于 2008-4-30 19:33 


QUOTE:
原帖由 cjaizss 于 2008-4-30 19:01 发表
to LZ,关于表达式的解析:
语法大致为
表达式->(表达式)
表达式->非 表达式
表达式->表达式 与 表达式
表达式->表达式 或 表达式
检索出括号、与、或、非,建立一个可能是树形的东西就可以了
树的没有分 ...

我来说说我的实现方法吧,让大家批评批评。

首先声明一下:我的编译原理等于没学,数据结构还算熟悉。

1> 词法分析模块:根据我的拙见,这部分无非就是分出所有的词汇,然后和标准的“词汇表”进行对比
2> 语法分析:(举例)        例如:对于此类表达式: ip.addr == 200.22.33.44 && tcp.srcport == 80
            存在的运算符分为两类:
              1> 逻辑运算符     &&      ||
                     2> 关系运算符     ==      !=    >     <     >=      <=

              
            方法是这样的:            1> 对于任何一个表达式,找到逻辑运算符   &&   或    ||,把表达式分成两部分
            2> 运用递归思想,分出所有的“基本表达式”(注释:基本表达式就是不包含“&&”或“||”的表达式)
            3> 既然能够把每个“基本表达式”分离出来,则对每个基本表达式做以下处理:
                   --------------------------
                             每个表达式肯定具有这样的特征:(例如:ip.srcaddr == 202.30.40.50)
                   1> 左值  :ip.srcaddr
                   2> 运算符:==
                   3> 右值  :202.30.40.50

                            规则应该可以这样描述的:
                   1> 运算符   决定    左值        (例如:当运算符为 >= 时,左值是ip.srcaddr 是不符合语法的)
                   2> 左值     决定    右值        (就是验证右值的合法性)

3> 如果上面两关都过的话,就可以进行计算了,计算的方法我是这样想的
        
        以前,上数据结构课程时,讲到“堆栈的应用一章时,讲到了堆栈在“后续表达式的计算的应用问题”,我觉得用同样的算法可以实现本表达式的运算,其实这里更简单:

表达式:    ip.srcaddr == 202.30.40.50 && tcp.srcport == 80

令: string1 = "ip.srcaddr == 200.30.40.50 && tcp.srcport == 80"
从报文中到ip.srcaddr 和 tcp.srcport 相关字段,进行替换
   
得到 string2 = "200.30.40.40 == 202.30.40.50 && 80 == 80"

这个时候应该用这样的理论:

        当一个报文能够通过filter时,代表这个报文符合这个filter的所有条件,换句话说:

        这个表达式中的所有 “基本表达式” 的 结果(true OR false),经过逻辑运算之后,结果一定 = true

           例如:
             200.30.40.50 == 202.30.40.50   &&  80 == 80
                   ---------------------------------------                                ------------
                                 |                                                                        |
                                 |                                                                        |
                                 V                                                                       V
                          表达式1                                                                 表达式2

                   求表达式1和表达式2的结果很简单吧,求得: 表达1=false, 表达式2=true

                   false && true = false,所以这个package是不符合条件的

说的比较乱,不知道对不对,呵呵。

[ 本帖最后由 anank 于 2008-4-30 19:34 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
版主 cjaizss   帅哥
版主-精灵使



UID:272747
注册:2005-5-26
最后登录: 2008-07-04
帖子:4288
精华:1

可用积分:282
信誉积分:100
专家积分:10 (本版)

状态:...保密...

[个人空间] [短信] [博客]


顶部
23楼 发表于 2008-4-30 21:02 
你的意思完全可以。但和我的方法不一样,你是整体递归下降,比较通用。我的方法是把规则分为两层,一层是原子规则,一层是连接逻辑符号,虽不通用,但是结构清楚。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

二十几年来最大的遗憾,并不是少赚了的钱,也不是少交了友,而是永远没有机会为最钟爱的数学真正做点什么,或许这会是这一生的遗憾
做个合格的电子工程师,其实很难

CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
zhuhefang2006
精灵




UID:605433
注册:2007-8-20
最后登录: 2008-07-04
帖子:193
精华:0

可用积分:188
信誉积分:0
专家积分:0 (本版)

状态:...保密...

[个人空间] [短信] [博客]


顶部
24楼 发表于 2008-4-30 21:37 
不错啊。。。



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
ayw215
新手




UID:469007
注册:2006-9-24
最后登录: 2008-05-23
帖子:12
精华:0

可用积分:11
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
25楼 发表于 2008-4-30 22:29 
很强悍的毕设~~~



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

灭绝
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
版主 cugb_cat   帅哥
版主-大法师


CU奥运火炬传递手2008
UID:342049
注册:2005-11-27
最后登录: 2008-07-04
帖子:8884
精华:6

可用积分:6810
信誉积分:110
专家积分:70 (本版)

来自:北京海淀中关村
状态:...保密...

[个人空间] [短信] [博客]


顶部
26楼 发表于 2008-4-30 23:06 
关于语法分析,可以采用自底向上和自顶向下,基本就是用栈,逻辑结构是语法树。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

欢迎访问ToFree社区
www.tofree.org

CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
BruceShea   帅哥 (魔教教主)
精灵使



CU奥运火炬传递手2008
UID:649434
注册:2007-12-2
最后登录: 2008-07-04
帖子:4216
精华:0

可用积分:1321
信誉积分:645
专家积分:0 (本版)

来自:武当山
状态:...离线...

[个人空间] [短信] [博客]


顶部
27楼 发表于 2008-5-1 02:07 
都是牛人!



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________




Knowing is not enough,we must apply;Willing is not enough,we must do!
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
gawk
精灵



UID:394228
注册:2006-3-29
最后登录: 2008-07-04
帖子:224
精华:0

可用积分:204
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
28楼 发表于 2008-5-1 10:08 
楼主人才,应该能搞个优秀毕业论文吧,哈哈



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

虽千万人吾往矣……
修炼xdr中……
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
zhlzn   帅哥
侠客




UID:673437
注册:2008-3-5
最后登录: 2008-06-19
帖子:44
精华:1

可用积分:45
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
29楼 发表于 2008-5-1 15:16 
这个帖子是不是该加精了吧?



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
NewCore   帅哥
风云使者



UID:244620
注册:2005-3-25
最后登录: 2008-06-30
帖子:413
精华:0

可用积分:321
信誉积分:100
专家积分:0 (本版)

状态:...保密...

[个人空间] [短信] [博客]


顶部
30楼 发表于 2008-5-1 20:37 
算得上很优秀的毕业设计了

比我本科毕业时候做的毕设强,呵呵



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

Tell her to reap it with a sickle of leather
Parsely sage rosemary and thyme
And gather it all in a bunch of heather
Then she will be a ture love of mine.
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布

首页 » 论坛 » C/C++ »


 


Copyright © 2001-2008 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

Processed in 0.086477 second(s), 4 queries , Gzip enabled