2012-11-29 162 views
0

我有一個lex模式文件(test.l),我想要識別IPv4地址和IPv6地址的模式。IPv4和IPv6地址的lex模式

目前我使用的二進制圖案符號例如

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

其中「1」,我使用的classification.I希望擴展該圖案包括IPv4地址(點分十進制)和IPv6地址的標籤(quad notation)

目前我的詞法分析器文件(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模式。

我不能編譯上述code.It是顯示

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

有人能指出什麼是錯誤。

回答

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.