IPv4和IPv6地址的lex模式

时间:2012-11-29 02:43:50

标签: compiler-errors lex flex-lexer

我有一个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

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

1 个答案:

答案 0 :(得分: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。