我在flex中定义了令牌
%%
@[^\\\" \n\(\),=\{\}#~]+ {yylval.sval = strdup(yytext + 1); return ENTRYTYPE;}
[A-Za-z][A-Za-z0-9:"]* { yylval.sval = strdup(yytext); return KEY; }
\"([^"]|\\.)*\"|\{([^"]|\\.)*\} { yylval.sval = strdup(yytext); return VALUE; }
[ \t\n] ; /* ignore whitespace */
[{}=,] { return *yytext; }
. { fprintf(stderr, "Unrecognized character %c in input\n", *yytext); }
%%
(虽然不是一个好方法) 问题是VALUE变量对于带引号的字符串是好的,形式为“some quote”;但是当它们被大括号({some sentences}形式)包围时,不适用于形式。 什么是凌乱的?
答案 0 :(得分:1)
我认为你想要这个,而不是:
\"([^"]|\\.)*\"|\{([^\}]|\\.)*\} { yylval.sval = strdup(yytext); return VALUE; }
更好的是,以下内容将更清晰,更易于维护:
\"([^"]|\\.)*\" { yylval.sval = strdup(yytext); return VALUE; }
\{([^\}]|\\.)*\} { yylval.sval = strdup(yytext); return VALUE; }
<强>更新强>
我已经在字符类表达式中转义了右括号。