1

IPv4 アドレスと IPv6 アドレスのパターンを認識したい lex パターン ファイル (test.l) があります。

現在、たとえばバイナリパターン表記を使用しています

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

ここで、「1」は分類に使用するタグです。このパターンを拡張して、IPv4 アドレス (ドット付き 10 進数) と IPv6 アドレス (4 進数表記) を含めたいと考えています。

現在、字句解析ファイル (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}\}"

誰かがエラーの内容や修正方法を教えてもらえますか?

誰かがエラーを指摘できますか。

4

1 に答える 1

1

この問題はおそらく、IPv6address複数行にまたがる の定義に関連しています。このような定義は行末までしかないため、その後の余分な行によって問題が発生します。これらの行でエラーが発生することが予想されます...

于 2012-11-29T23:51:18.827 に答える