【发布时间】:2014-05-01 21:09:51
【问题描述】:
我正在使用 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 字母数字字符、下划线、连字符、正斜杠和句点,并且必须以字母或斜杠开头。
带引号的字符串可以在引号之间包含任何字母数字字符。
为了满足更多规范,我为引用字符串采用了两个不同的字符串。
谢谢。
【问题讨论】:
标签: regex flex-lexer