2013-04-29 17 views
0

我definig內彎曲令牌作爲正則表達式(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); } 
%% 

(雖然,不是一個好辦法) 問題是變量的值都爲帶引號的字符串做精細,形式「一些報價」;但是當它們被大括號(形式{一些句子})包圍時,並不適用於這種形式。 那裏有什麼雜亂的東西?

回答

1

我認爲你想這樣,而是:

\"([^"]|\\.)*\"|\{([^\}]|\\.)*\}  { yylval.sval = strdup(yytext); return VALUE; } 

更妙的是,以下將更加清晰和易於維護:

\"([^"]|\\.)*\"       { yylval.sval = strdup(yytext); return VALUE; } 
\{([^\}]|\\.)*\}      { yylval.sval = strdup(yytext); return VALUE; } 

更新

我已經逃脫字符類表達式中的右大括號。

+0

'\ 「([^」] | \\。)* \」 \t \t \t \t {yylval.sval =的strdup(yytext中);返回值;} \ {([^}。] | \\) * \} {yylval.sval = strdup(yytext); return VALUE;}' 給出大括號文本的錯誤爲 ** [bold] **語法錯誤,意外$ end,期望KEY或'}'* * – BaRud 2013-04-29 17:27:32