(я избегаю всех своих цитат, которые могут затруднить чтение)
Мне нужно сопоставить строку, начинающуюся и заканчивающуюся одним и тем же символом в flex ... Я знаю длинный путь (RE - \ "a [^ (a \")] a \ "| \" b [^ (b \ ") b \" | и т.д ...), но я уверен, что это не то, что я должен делать (завтра в середине!);
Мне нужно сделать это в flex, но если вы можете придумать для него короткое регулярное выражение, возможно, я смогу преобразовать его в нотацию flex.
То, о чем я думал, было чем-то вроде -
%%
int firstChar;
%x string;
%%
\"[A-Za-z] { firstChar = yytext+1; /* to get first character,
for people unfamiliar
with c pointers */
BEGIN(string);}
<string>[^((firstChar)\")] {}
<string>[(firstChar)\"] { BEGIN(INITIAL); }
(плохо знаком с флексом, возможно, неправильная запись)
Но это меня несколько беспокоит, во-первых, наличие этой переменной делает этот язык не обычным; во-вторых, я не знаю, можно ли вообще использовать переменную to в сопоставлении с образцом; и в-третьих, я не знаю, как НЕ соответствовать этому, если это просто обычная строка. И в-третьих, я не знаю, как вернуть все, что было найдено в «строке»
Спасибо за вашу помощь!