0

我正在尝试编写将字符串作为输入的 lex 代码,并通过一个长字典文件进行解析以找到该字典中最长的单词,该单词仅由该字符串中的字母组成。字符串中的每个字母都可以使用零次或多次,这意味着单词“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 回答