我有一个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*/
}
我稍微扩展了以下代码。
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地址。当我尝试编译代码时
flex --header-file="test.h" test.l
test.l:665: unrecognized rule
错误在第"<S_dst_ip>\{{BINARY_PATTERN}\}|\{{IPv4address}\}|\{{IPv6address}\}"
行
有人可以向我指出错误是什么或如何解决?
有人可以指出错误是什么。
答案 0 :(得分:1)
问题可能与你在多行中定义IPv6address
有关 - 这样的定义只会到达行的末尾,因此之后的额外行将导致探测。我希望这些线上的错误......