1

小さなスキャナーを生成するために、Flex を使用します。これは、Adobe タイプではなく Linux/Unix です。これまで、私は常に静的検索文字列を使用してきました。getopt を介して文字列を提供し、それを検索に使用できるようにすることで、コマンドラインで提供される検索文字列を提供したいと考えています。

古い検索方法は次のとおりです。

.*"_"\n      ECHO;

アンダースコアで終わる行を検索します。

今、私はこの方法で検索したい:

.*<arbitrary string>.*\n    ECHO;

を受け入れるように flex を取得する方法がわかりません<arbitrary string>。getopt で取得できますが、flex で構文を受け入れることができませんでした。

私がやっているのは、私が抱えている特別な問題のための非常に限定された特別な目的のgrepです。

どんな助けでも大歓迎です。

4

1 に答える 1

1
.*\n { if(strstr(yytext, "arbitrary string")) ECHO; else REJECT; }

yytext に「任意の文字列」が含まれていない場合、REJECT ステートメントは次のルールにスキップします。これはもちろん、コンパイル時に検索文字列がわかっている場合と同じパフォーマンスを提供しません。独自の grep プログラムを実装している場合、glibc の regcomp()/regexec() は flex よりも高速である可能性があります。

于 2013-03-25T15:52:35.160 に答える