#include <assert.h>
#include <errno.h>
#include <inttypes.h>
-#include "filter-parser.h"
#include "filter-ast.h"
+#include "filter-parser.h"
+__attribute__((visibility("protected")))
int yydebug;
int filter_parser_debug = 0;
+__attribute__((visibility("protected")))
int yyparse(struct filter_parser_ctx *parser_ctx);
+__attribute__((visibility("protected")))
int yylex(union YYSTYPE *yyval, struct filter_parser_ctx *parser_ctx);
+__attribute__((visibility("protected")))
int yylex_init_extra(struct filter_parser_ctx *parser_ctx, yyscan_t * ptr_yy_globals);
+__attribute__((visibility("protected")))
int yylex_destroy(yyscan_t yyparser_ctx);
+__attribute__((visibility("protected")))
void yyrestart(FILE * in_str, yyscan_t parser_ctx);
struct gc_string {
[ NODE_UNARY_OP ] = "NODE_UNARY_OP",
};
+__attribute__((visibility("protected")))
const char *node_type(struct filter_node *node)
{
if (node->type < NR_NODE_TYPES)
* gsrc will be garbage collected immediately, and gstr might be.
* Should only be used to append characters to a string literal or constant.
*/
+__attribute__((visibility("protected")))
struct gc_string *gc_string_append(struct filter_parser_ctx *parser_ctx,
struct gc_string *gstr,
struct gc_string *gsrc)
return gstr;
}
+__attribute__((visibility("protected")))
void setstring(struct filter_parser_ctx *parser_ctx, YYSTYPE *lvalp, const char *src)
{
lvalp->gs = gc_string_alloc(parser_ctx, strlen(src) + 1);
return node;
}
+__attribute__((visibility("protected")))
void yyerror(struct filter_parser_ctx *parser_ctx, const char *str)
{
fprintf(stderr, "error %s\n", str);
}
+__attribute__((visibility("protected")))
int yywrap(void)
{
return 1;
%start translation_unit
%token CHARACTER_CONSTANT_START SQUOTE STRING_LITERAL_START DQUOTE
%token ESCSEQ CHAR_STRING_TOKEN
-%token DECIMAL_CONSTANT OCTAL_CONSTANT HEXADECIMAL_CONSTANT
+%token DECIMAL_CONSTANT OCTAL_CONSTANT HEXADECIMAL_CONSTANT FLOAT_CONSTANT
%token LSBRAC RSBRAC LPAREN RPAREN LBRAC RBRAC RARROW
%token STAR PLUS MINUS
%token MOD_OP DIV_OP RIGHT_OP LEFT_OP
sscanf(yylval.gs->s, "0x%" PRIx64,
&$$->u.expression.u.constant);
}
+ | FLOAT_CONSTANT
+ {
+ $$ = make_node(parser_ctx, NODE_EXPRESSION);
+ $$->u.expression.type = AST_EXP_FLOAT_CONSTANT;
+ sscanf(yylval.gs->s, "%lg",
+ &$$->u.expression.u.float_constant);
+ }
| STRING_LITERAL_START DQUOTE
{
$$ = make_node(parser_ctx, NODE_EXPRESSION);