0

我有一个 lex 模式文件 (test.l),我想在其中识别 IPv4 地址和 IPv6 地址的模式。

目前我使用二进制模式符号,例如

src -ip of 192.168.156.203 is to be written as 
1 src-ip {11000000 10101000 10011100 11001011} 

其中“1”是我用于分类的标签。我想扩展此模式以包括 IPv4 地址(点分十进制)和 IPv6 地址(四进制表示法)

目前我的词法分析器文件(test.l)的相关部分如下所示。

    BINARY_PATTERN [ \t]*[ \t0-1\-\*]+[ \t]*

    <S_src_ip>\{{BINARY_PATTERN}\}  {

         /*Some code here*/
    }

我稍微扩展了代码如下。

<S_dst_ip>\{{BINARY_PATTERN}\}|\{[0-255]\\.[0-255]\\.[0-255]\\.[0-255}\}

支持 IPv4 地址。上面的代码有问题吗?另外我如何扩展它以支持 IPV6 模式。

我无法编译上面的代码。它显示

flex --header-file="test.h" test.l 
test.l:50: bad character class

有人可以指出错误是什么。

4

1 回答 1

1

我想我看到了一个错字。

<S_dst_ip>\{{BINARY_PATTERN}\}|\{[0-255]\\.[0-255]\\.[0-255]\\.[0-255}\}

应该:

<S_dst_ip>\{{BINARY_PATTERN}\}|\{[0-255]\\.[0-255]\\.[0-255]\\.[0-255]\}

但除此之外,我认为角色类[0-255]不会完成你想要的。它将匹配单个数字 0、1、2 或 5。

于 2012-11-29T16:27:36.540 回答