2012-11-29 98 views
1

我有一个lex模式文件(test.l),我想要识别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*/ 
    } 

我稍微扩展了下面的代码。

dec-octet  [0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5] 
IPv4address {dec-octet}\.{dec-octet}\.{dec-octet}\.{dec-octet} 

h16   [0-9A-Fa-f]{1,4} 
ls32   {h16}:{h16}|{IPv4address} 
IPv6address ({h16}:){6}{ls32}| 
       ::({h16}:){5}{ls32}| 
       ({h16})?::({h16}:){4}{ls32}| 
       (({h16}:){0,1}{h16})?::({h16}:){3}{ls32}| 
       (({h16}:){0,2}{h16})?::({h16}:){2}{ls32}| 
       (({h16}:){0,3}{h16})?::{h16}:{ls32}| 
       (({h16}:){0,4}{h16})?::{ls32}| 
       (({h16}:){0,5}{h16})?::{h16}| 
       (({h16}:){0,6}{h16})?:: 


<S_dst_ip>\{{BINARY_PATTERN}\}|\{{IPv4address}\}|\{{IPv6address}\} { 

       /*Some code here*/ 

    } 

支持IPv4地址和IPv6 addresses.when我尝试编译代码

flex --header-file="test.h" test.l 
test.l:665: unrecognized rule 

的错误是在该行"<S_dst_ip>\{{BINARY_PATTERN}\}|\{{IPv4address}\}|\{{IPv6address}\}"

有人能指出我的错误是什么或者如何修复?

有人能指出什么是错误。

+1

flex已经足够友好地告诉你哪一行包含错误。也许你可以把那种善意转发给那些你认为能够帮助你的人。 – rici

回答

1

该问题可能与您在多行中定义的IPv6address有关 - 这些定义只会延续到行的末尾,因此之后的额外行将导致探针。我希望在这些行上出现错误...