Распознавание слов без учета регистра Lex
мне нужно treate строку в C, где некоторые слова, если они присутствуют, должны быть преобразованы в верхний регистр. Мой первый выбор состоял в том, чтобы работать в LEX что-то вроде этого:
%%
word1 {setToUppercase(yytext);RETURN WORD1;}
word2 {setToUppercase(yytext);RETURN WORD2;}
word3 {setToUppercase(yytext);RETURN WORD3;}
%%
проблема, которую я вижу, заключается в том, что я не могу определить, являются ли некоторые символы прописными (f.e. Слово 1, слово 1...). Это может означать по одному листингу:
%%
word1 |
Word1 |
WOrd1
{setToUppercase(yytext);RETURN WORD1;}
%%
есть ли способ определить, что эти особые маркеры должны сравниваться в нечувствительном к регистру режиме? Я понял, что могу. скомпилируйте лексер без учета регистра, но это может повлиять на другие параметры моей программы.
Если нет, любое предложение обходного пути?
3 ответов
вы можете установить нечувствительность к регистру в :
%option caseless
можно назвать flex -i
.
или вы можете указать отдельные правила без учета регистра:
(?i:word)
его очень просто дать ваши шаблоны и действия,как это, не волнуйтесь. При компиляции дайте его как, Лекс -я именем.l Это в системах LINUX.