summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2013-12-31 00:07:06 +0000
committerJo-Philipp Wich <jow@openwrt.org>2013-12-31 00:15:59 +0000
commitbaeded13085b9cd2f5d866fbcfaee63a52144f07 (patch)
tree96437619d38bdc9c6e8c1b359505d133a1097bbf
parentcd5db769d8b77dd540db44a095d09edb3153e2d8 (diff)
downloadjsonpath-baeded13085b9cd2f5d866fbcfaee63a52144f07.tar.gz
lexer: accept single quoted string literals
-rw-r--r--lexer.l18
-rw-r--r--parser.y1
2 files changed, 13 insertions, 6 deletions
diff --git a/lexer.l b/lexer.l
index a480ca7..18937e8 100644
--- a/lexer.l
+++ b/lexer.l
@@ -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} {
diff --git a/parser.y b/parser.y
index f5e8966..75c3340 100644
--- a/parser.y
+++ b/parser.y
@@ -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;
};