BaRud
BaRud

Reputation: 3218

regex (in flex) for complete general sentence

I am definig tokens inside flex as

%%

@[^\\\"  \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); }
%%

(Though, not a good way) The problem is the VALUE variable are doing fine for a quoted string, of the form "some quote"; but not for the form when they are enclosed by braces (of the form {some sentences}) as tried. What is messy there?

Upvotes: 0

Views: 98

Answers (1)

David Gorsline
David Gorsline

Reputation: 5018

I think that you want this, instead:

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

Even better, the following will be clearer and easier to maintain:

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

Update

I have escaped the right brace in the character class expressions.

Upvotes: 1

Related Questions