我正在尝试编写 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”等的输出,而这些显然不是有效的单词。有人知道如何解决这个问题吗?
最佳答案
您可以使用行首和行尾标记作为正则表达式的一部分,以要求匹配整行,而不仅仅是其中的一部分。尝试将正则表达式从 [input]+
更改为
^[input]+$
然后,您将需要一些单独的逻辑来跟踪迄今为止找到的最长字符串,但从上面的代码来看,我认为这更直接地解决了您手头的问题。
希望这有帮助!
关于c - Lex:仅由其他单词的字母组成的最长单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14666457/