【问题标题】:unrecognized rule error in lexlex中无法识别的规则错误
【发布时间】:2012-11-29 03:39:43
【问题描述】:

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

错误在"&lt;S_dst_ip&gt;\{{BINARY_PATTERN}\}|\{{IPv4address}\}|\{{IPv6address}\}"这一行

谁能指出错误是什么或如何解决?

谁能指出错误是什么。

【问题讨论】:

  • flex 很友好地告诉您哪一行包含错误。也许您可以将这种善意转达给您认为可以帮助您的人。

标签: bison yacc lex flex-lexer


【解决方案1】:

问题可能与您在多行中对IPv6address 的定义有关——这样的定义只会到行尾,因此之后的额外行会引起问题。我预计这些行会出错...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多