Lex不区分大小写的单词检测

时间:2014-03-27 11:23:17

标签: c lex

我需要在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;}

%%

有没有办法在不区分大小写的模式下定义这些特定的令牌?我发现我可以将lexer编译为不区分大小写,但这会影响我程序的其他部分。

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

3 个答案:

答案 0 :(得分:16)

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

%option caseless

您可以致电flex -i

或者您可以说明个别规则不区分大小写:

(?i:word)

答案 1 :(得分:1)

非常简单地给出你的模式和行动,不用担心。 编译时给它, lex -i filename.l 这是在LINUX系统上。

答案 2 :(得分:0)

似乎有效的方式是:

(W|w)(O|o)(R|r)(D|d) {setToUppercase(yytext);}