2012-08-16 01:00:30 +01:00
|
|
|
%{
|
|
|
|
#include "compile.h"
|
|
|
|
#include "parser.tab.h" /* Generated by bison. */
|
2012-09-11 00:04:47 +01:00
|
|
|
|
|
|
|
#define YY_USER_ACTION \
|
|
|
|
do { \
|
|
|
|
yylloc->start = yyget_extra(yyscanner); \
|
|
|
|
yylloc->end = yylloc->start + yyleng; \
|
|
|
|
yyset_extra(yylloc->end, yyscanner); \
|
|
|
|
} while (0);
|
|
|
|
|
2012-08-16 01:00:30 +01:00
|
|
|
%}
|
|
|
|
|
|
|
|
%option noyywrap nounput noinput nodefault
|
|
|
|
%option reentrant
|
2012-09-11 00:04:47 +01:00
|
|
|
%option extra-type="int"
|
2012-08-16 01:00:30 +01:00
|
|
|
%option bison-bridge bison-locations
|
2012-09-11 09:13:20 +01:00
|
|
|
%option prefix="jq_yy"
|
2012-08-16 01:00:30 +01:00
|
|
|
|
|
|
|
%%
|
|
|
|
|
|
|
|
"==" { return EQ; }
|
|
|
|
"as" { return AS; }
|
2012-08-21 18:14:13 +01:00
|
|
|
"def" { return DEF; }
|
2012-08-27 10:11:55 +01:00
|
|
|
"|=" { return SETPIPE; }
|
2012-09-04 15:34:34 +01:00
|
|
|
"if" { return IF; }
|
|
|
|
"then" { return THEN; }
|
|
|
|
"else" { return ELSE; }
|
2012-09-04 16:05:24 +01:00
|
|
|
"elif" { return ELSE_IF; }
|
2012-09-04 20:38:59 +01:00
|
|
|
"and" { return AND; }
|
|
|
|
"or" { return OR; }
|
2012-09-04 20:43:40 +01:00
|
|
|
"not" { return NOT; }
|
2012-09-04 15:34:34 +01:00
|
|
|
"end" { return END; }
|
|
|
|
"//" { return DEFINEDOR; }
|
2012-09-10 16:57:17 +01:00
|
|
|
"."|"="|";"|"["|"]"|","|":"|"("|")"|"{"|"}"|"|"|"+"|"-"|"*"|"/"|"\$" { return yytext[0];}
|
2012-08-16 01:00:30 +01:00
|
|
|
|
2012-09-11 09:13:20 +01:00
|
|
|
\"(\\.|[^\\\"])*\" |
|
2012-09-03 15:32:50 +01:00
|
|
|
-?[0-9.]+([eE][+-]?[0-9]+)? {
|
2012-09-03 13:36:12 +01:00
|
|
|
yylval->literal = jv_parse_sized(yytext, yyleng); return LITERAL;
|
|
|
|
}
|
|
|
|
|
2012-09-11 10:12:25 +01:00
|
|
|
\"(\\.|[^\\\"])* {
|
|
|
|
yylval->literal = jv_invalid_with_msg(jv_string("Unterminated string"));
|
|
|
|
return LITERAL;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2012-09-02 16:31:59 +01:00
|
|
|
[[:alnum:]]+ { yylval->literal = jv_string(yytext); return IDENT;}
|
2012-09-03 13:36:12 +01:00
|
|
|
|
2012-08-16 01:00:30 +01:00
|
|
|
[ \n\t]+ {}
|
2012-09-03 13:36:12 +01:00
|
|
|
|
2012-09-11 09:13:20 +01:00
|
|
|
. { return INVALID_CHARACTER; }
|
|
|
|
|
2012-08-16 01:00:30 +01:00
|
|
|
%%
|
|
|
|
/* perhaps these should be calls... */
|
|
|
|
/*
|
|
|
|
"true" { return TRUE; }
|
|
|
|
"false" { return FALSE; }
|
|
|
|
"null" { return NULL; }
|
|
|
|
*/
|