diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2013-12-31 00:07:06 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2013-12-31 00:15:59 +0000 |
commit | baeded13085b9cd2f5d866fbcfaee63a52144f07 (patch) | |
tree | 96437619d38bdc9c6e8c1b359505d133a1097bbf | |
parent | cd5db769d8b77dd540db44a095d09edb3153e2d8 (diff) | |
download | jsonpath-baeded13085b9cd2f5d866fbcfaee63a52144f07.tar.gz |
lexer: accept single quoted string literals
-rw-r--r-- | lexer.l | 18 | ||||
-rw-r--r-- | parser.y | 1 |
2 files changed, 13 insertions, 6 deletions
@@ -101,17 +101,23 @@ WS [ \t\n]* %% -\" { +["'] { s->str_ptr = s->str_buf; + s->str_quote = *yytext; memset(s->str_buf, 0, sizeof(s->str_buf)); BEGIN(STRING); } <STRING>{ - \" { - BEGIN(INITIAL); - yylval.op = jp_alloc_op(T_STRING, 0, s->str_buf); - return T_STRING; + ["'] { + if (*yytext == s->str_quote) + { + BEGIN(INITIAL); + yylval.op = jp_alloc_op(T_STRING, 0, s->str_buf); + return T_STRING; + } + + str_put(s, *yytext); } \\([0-3][0-7]{1,2}|[0-7]{0,2}) { str_decode(s, yytext + 1, 8); } @@ -126,7 +132,7 @@ WS [ \t\n]* \\t { str_put(s, '\t'); } \\v { str_put(s, '\v'); } \\. { str_put(s, *yytext); } - [^\\"]+ { while (*yytext) str_put(s, *yytext++); } + [^\\"']+ { while (*yytext) str_put(s, *yytext++); } } {BOOL} { @@ -59,6 +59,7 @@ struct jp_state { struct jp_opcode *pool; struct jp_opcode *path; const char *error; + char str_quote; char str_buf[128]; char *str_ptr; }; |