Lex and parse .foo better.
'.as' is now valid, '. foo' is now invalid. See #141.
This commit is contained in:
1 parent
dad608d5c0
commit
2ffbb9d6b7
2 files changed
+6
-4
No files matched your search
@@ -108,6 +108,7 @@ struct lexer_param;
|
|||||||
|
|
||||||
|
|
||||||
[a-zA-Z_][a-zA-Z_0-9]* { yylval->literal = jv_string(yytext); return IDENT;}
|
[a-zA-Z_][a-zA-Z_0-9]* { yylval->literal = jv_string(yytext); return IDENT;}
|
||||||
|
\.[a-zA-Z_][a-zA-Z_0-9]* { yylval->literal = jv_string(yytext+1); return FIELD;}
|
||||||
|
|
||||||
[ \n\t]+ {}
|
[ \n\t]+ {}
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ struct lexer_param;
|
|||||||
|
|
||||||
%token INVALID_CHARACTER
|
%token INVALID_CHARACTER
|
||||||
%token <literal> IDENT
|
%token <literal> IDENT
|
||||||
|
%token <literal> FIELD
|
||||||
%token <literal> LITERAL
|
%token <literal> LITERAL
|
||||||
%token <literal> FORMAT
|
%token <literal> FORMAT
|
||||||
%token EQ "=="
|
%token EQ "=="
|
||||||
@@ -399,11 +400,11 @@ Term:
|
|||||||
'.' {
|
'.' {
|
||||||
$$ = gen_noop();
|
$$ = gen_noop();
|
||||||
} |
|
} |
|
||||||
Term '.' IDENT {
|
Term FIELD {
|
||||||
$$ = gen_index($1, gen_const($3));
|
$$ = gen_index($1, gen_const($2));
|
||||||
} |
|
} |
|
||||||
'.' IDENT {
|
FIELD {
|
||||||
$$ = gen_index(gen_noop(), gen_const($2));
|
$$ = gen_index(gen_noop(), gen_const($1));
|
||||||
} |
|
} |
|
||||||
'.' error {
|
'.' error {
|
||||||
FAIL(@$, "try .[\"field\"] instead of .field for unusually named fields");
|
FAIL(@$, "try .[\"field\"] instead of .field for unusually named fields");
|
||||||
|
|||||||
Reference in new issue
Block a user