Lex and parse .foo better.

'.as' is now valid, '. foo' is now invalid. See #141.
This commit is contained in:
Stephen Dolan committed 2013-06-05 13:41:56 +01:00
1 parent dad608d5c0
commit 2ffbb9d6b7
2 files changed
+6 -4

No files matched your search

+1
View File
@@ -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]+ {}
+5 -4
View File
@@ -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");