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+1); return FIELD;}
[ \n\t]+ {}
+5 -4
View File
@@ -46,6 +46,7 @@ struct lexer_param;
%token INVALID_CHARACTER
%token <literal> IDENT
%token <literal> FIELD
%token <literal> LITERAL
%token <literal> FORMAT
%token EQ "=="
@@ -399,11 +400,11 @@ Term:
'.' {
$$ = gen_noop();
} |
Term '.' IDENT {
$$ = gen_index($1, gen_const($3));
Term FIELD {
$$ = gen_index($1, gen_const($2));
} |
'.' IDENT {
$$ = gen_index(gen_noop(), gen_const($2));
FIELD {
$$ = gen_index(gen_noop(), gen_const($1));
} |
'.' error {
FAIL(@$, "try .[\"field\"] instead of .field for unusually named fields");