0

文字列を入力として受け取り、長い辞書ファイルを解析して、その文字列内の文字のみで構成される辞書内の最長の単語を見つける lex コードを作成しようとしています。文字列内の各文字は 0 回以上使用できます。つまり、"in" という単語は "input" として有効です。これが私がこれまでに持っているものです:

%{
#include <stdio.h>
%}

%option noyywrap

%% 
[input]+ { 
          printf("This is the longest I think: %s\n", yytext);
         }

.|\n    {}
%%

int main(void)
{
    yylex();
    return 0;
}

しかし、これは本当に私が期待することをしません。このコードは、辞書内のすべての単語の一致部分を処理して出力するため、「i」、「iu」、「inu」などの出力が得られますが、これらは明らかに有効な単語ではありません。誰でもこれを修正する方法を知っていますか?

4

1 に答える 1

1

行頭マーカーと行末マーカーを正規表現の一部として使用して、行の一部だけでなく行全体が一致することを要求できます。正規表現を から[input]+に変更してみてください

^[input]+$

次に、これまでに見つけた最長の文字列を追跡するための別のロジックが必要になりますが、上記のコードから判断すると、これは手元の質問に直接対処していると思います.

お役に立てれば!

于 2013-02-02T21:04:56.083 に答える