我需要在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编译为不区分大小写,但这会影响我程序的其他部分。
如果没有,任何解决方法建议?
答案 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);}