Я пишу синтаксический анализатор с использованием Flex и Bison и определяю различные токены как:
[0-9]+ { yylval.str=strdup(yytext); return digit; }
[0-9]+\.[0-9]* { yylval.str=strdup(yytext); return floating; }
[a-zA-Z_][a-zA-Z0-9_]* { yylval.str=strdup(yytext); return key; }
[a-zA-Z/][a-zA-Z_-/.]* { yylval.str=strdup(yytext); return string; }
[a-zA-Z0-9._-]+ { yylval.str=strdup(yytext); return hostname; }
["][a-zA-Z0-9!@#$%^&*()_-+=.,/?]* { yylval.str=strdup(yytext); return qstring1; }
[a-zA-Z0-9!@#$%^&*()_-+=.,/?]*["] { yylval.str=strdup(yytext); return qstring2; }
[#].+ { yylval.str=strdup(yytext); return comment;}
[ \n\t] {} /* Ignore white space. */
. {printf("ERR:L:%d\n", q); return ERROR;}
И он показывает ошибку «Отрицательный диапазон в классе символов» в регулярных выражениях для строки, qstring1 и qstring2.
Может кто-нибудь, пожалуйста, помогите мне с тем, где я ошибся?
Спецификация такова: строки без кавычек могут содержать буквенно-цифровые символы ASCII, знаки подчеркивания, дефисы, косую черту и точку и должны начинаться с буквы или косой черты.
Строки в кавычках могут содержать любой буквенно-цифровой символ между кавычками.
Я взял две разные строки для строк в кавычках, чтобы выполнить еще несколько спецификаций.
Спасибо.