Lex:最长的单词只包含来自其他单词的字母

时间:2013-02-02 20:59:01

标签: c lex flex-lexer

我正在尝试编写一个将字符串作为输入的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”等,这些显然不是有效的单词。任何人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以使用行首和行尾标记作为正则表达式的一部分,以要求整行匹配,而不仅仅是匹配的一部分。尝试将正则表达式从[input]+更改为

^[input]+$

然后你需要一些单独的逻辑来跟踪你到目前为止找到的最长的字符串,但从你上面的代码判断我认为这更能直接解决你手头的问题。

希望这有帮助!