我需要在C中处理一个字符串,其中某些单词(如果存在)必须转换为大写。我的第一选择是在LEX中进行如下操作:

%%
word1    {setToUppercase(yytext);RETURN WORD1;}
word2    {setToUppercase(yytext);RETURN WORD2;}
word3    {setToUppercase(yytext);RETURN WORD3;}
%%

我看到的问题是,我无法检测某些字符是否为大写(例如Word1,wOrd1 ...)。这可能意味着一个一一列出:
%%
word1   |
Word1   |
WOrd1
 {setToUppercase(yytext);RETURN WORD1;}

%%

有没有一种方法可以定义要在不区分大小写的模式下比较此特定于电子的 token ?我发现我可以将词法分析器编译为不区分大小写,但这会影响程序的其他参数。

如果没有,有任何解决方法的建议吗?

最佳答案

您可以在.l文件中设置不区分大小写:

%option caseless

您可以调用flex -i

或者您可以声明个别规则不区分大小写:
(?i:word)

关于c - Lex不区分大小写的单词检测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22686117/

10-13 03:44