c - Lex:仅由其他单词的字母组成的最长单词

标签 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”等的输出,而这些显然不是有效的单词。有人知道如何解决这个问题吗?

最佳答案

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

^[input]+$

然后,您将需要一些单独的逻辑来跟踪迄今为止找到的最长字符串,但从上面的代码来看,我认为这更直接地解决了您手头的问题。

希望这有帮助!

关于c - Lex:仅由其他单词的字母组成的最长单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14666457/

相关文章:

c - 无时钟 I2C STM32L0

c - 用于存储带孔凸多边形的库/数据结构

json - JSON 数组 LL(1) 是否可解析?

c++ - 错误时会发生什么 - Bison

c - 在 xv6 中实现 lseek

C 到 Pascal 类型转换

parsing - 我应该如何在 yacc/bison 和 lex 中制定递归规则?

c - Flex/Bison EOF 从标准输入与文件传播

c++ - Bison 和用户类 : compiling error

c - Flex 和 Bison,检测宏语句(新手)