mirror of https://github.com/ecmwf/eccodes.git
Merge branch 'develop' into bugfix/ECC-1855_bad_step_initialisation
This commit is contained in:
commit
3ac41d63fd
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
#include "grib_accessor_class_data_g2bifourier_packing.h"
|
#include "grib_accessor_class_data_g2bifourier_packing.h"
|
||||||
#include "grib_scaling.h"
|
#include "grib_scaling.h"
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
grib_accessor_class_data_g2bifourier_packing_t _grib_accessor_class_data_g2bifourier_packing{"data_g2bifourier_packing"};
|
grib_accessor_class_data_g2bifourier_packing_t _grib_accessor_class_data_g2bifourier_packing{"data_g2bifourier_packing"};
|
||||||
grib_accessor_class* grib_accessor_class_data_g2bifourier_packing = &_grib_accessor_class_data_g2bifourier_packing;
|
grib_accessor_class* grib_accessor_class_data_g2bifourier_packing = &_grib_accessor_class_data_g2bifourier_packing;
|
||||||
|
|
|
@ -757,7 +757,7 @@ grib_expression* new_is_in_dict_expression(grib_context* c, const char* name, co
|
||||||
grib_expression* new_true_expression(grib_context* c);
|
grib_expression* new_true_expression(grib_context* c);
|
||||||
|
|
||||||
/* grib_expression_class_string_compare.cc */
|
/* grib_expression_class_string_compare.cc */
|
||||||
grib_expression* new_string_compare_expression(grib_context* c, grib_expression* left, grib_expression* right);
|
grib_expression* new_string_compare_expression(grib_context* c, grib_expression* left, grib_expression* right, int eq);
|
||||||
|
|
||||||
/* grib_expression_class_unop.cc */
|
/* grib_expression_class_unop.cc */
|
||||||
grib_expression* new_unop_expression(grib_context* c, grib_unop_long_proc long_func, grib_unop_double_proc double_func, grib_expression* exp);
|
grib_expression* new_unop_expression(grib_context* c, grib_unop_long_proc long_func, grib_unop_double_proc double_func, grib_expression* exp);
|
||||||
|
|
|
@ -22,7 +22,8 @@
|
||||||
IMPLEMENTS = print
|
IMPLEMENTS = print
|
||||||
IMPLEMENTS = add_dependency
|
IMPLEMENTS = add_dependency
|
||||||
MEMBERS = grib_expression *left
|
MEMBERS = grib_expression *left
|
||||||
MEMBERS = grib_expression *right
|
MEMBERS = grib_expression *right
|
||||||
|
MEMBERS = int eq
|
||||||
END_CLASS_DEF
|
END_CLASS_DEF
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
@ -50,6 +51,7 @@ typedef struct grib_expression_string_compare{
|
||||||
/* Members defined in string_compare */
|
/* Members defined in string_compare */
|
||||||
grib_expression *left;
|
grib_expression *left;
|
||||||
grib_expression *right;
|
grib_expression *right;
|
||||||
|
int eq;
|
||||||
} grib_expression_string_compare;
|
} grib_expression_string_compare;
|
||||||
|
|
||||||
|
|
||||||
|
@ -110,7 +112,11 @@ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
*lres = (grib_inline_strcmp(v1, v2) == 0);
|
if (e->eq) // IS operator
|
||||||
|
*lres = (grib_inline_strcmp(v1, v2) == 0);
|
||||||
|
else // ISNOT operator
|
||||||
|
*lres = (grib_inline_strcmp(v1, v2) != 0);
|
||||||
|
|
||||||
return GRIB_SUCCESS;
|
return GRIB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,12 +153,13 @@ static void add_dependency(grib_expression* g, grib_accessor* observer)
|
||||||
}
|
}
|
||||||
|
|
||||||
grib_expression* new_string_compare_expression(grib_context* c,
|
grib_expression* new_string_compare_expression(grib_context* c,
|
||||||
grib_expression* left, grib_expression* right)
|
grib_expression* left, grib_expression* right, int eq)
|
||||||
{
|
{
|
||||||
grib_expression_string_compare* e = (grib_expression_string_compare*)grib_context_malloc_clear_persistent(c, sizeof(grib_expression_string_compare));
|
grib_expression_string_compare* e = (grib_expression_string_compare*)grib_context_malloc_clear_persistent(c, sizeof(grib_expression_string_compare));
|
||||||
e->base.cclass = grib_expression_class_string_compare;
|
e->base.cclass = grib_expression_class_string_compare;
|
||||||
e->left = left;
|
e->left = left;
|
||||||
e->right = right;
|
e->right = right;
|
||||||
|
e->eq = eq;
|
||||||
return (grib_expression*)e;
|
return (grib_expression*)e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
1471
src/grib_lex.cc
1471
src/grib_lex.cc
File diff suppressed because it is too large
Load Diff
2559
src/grib_yacc.cc
2559
src/grib_yacc.cc
File diff suppressed because it is too large
Load Diff
|
@ -174,10 +174,11 @@ extern int grib_yydebug;
|
||||||
OR = 375, /* OR */
|
OR = 375, /* OR */
|
||||||
NOT = 376, /* NOT */
|
NOT = 376, /* NOT */
|
||||||
IS = 377, /* IS */
|
IS = 377, /* IS */
|
||||||
IDENT = 378, /* IDENT */
|
ISNOT = 378, /* ISNOT */
|
||||||
STRING = 379, /* STRING */
|
IDENT = 379, /* IDENT */
|
||||||
INTEGER = 380, /* INTEGER */
|
STRING = 380, /* STRING */
|
||||||
FLOAT = 381 /* FLOAT */
|
INTEGER = 381, /* INTEGER */
|
||||||
|
FLOAT = 382 /* FLOAT */
|
||||||
};
|
};
|
||||||
typedef enum grib_yytokentype grib_yytoken_kind_t;
|
typedef enum grib_yytokentype grib_yytoken_kind_t;
|
||||||
#endif
|
#endif
|
||||||
|
@ -306,10 +307,11 @@ extern int grib_yydebug;
|
||||||
#define OR 375
|
#define OR 375
|
||||||
#define NOT 376
|
#define NOT 376
|
||||||
#define IS 377
|
#define IS 377
|
||||||
#define IDENT 378
|
#define ISNOT 378
|
||||||
#define STRING 379
|
#define IDENT 379
|
||||||
#define INTEGER 380
|
#define STRING 380
|
||||||
#define FLOAT 381
|
#define INTEGER 381
|
||||||
|
#define FLOAT 382
|
||||||
|
|
||||||
/* Value type. */
|
/* Value type. */
|
||||||
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||||
|
@ -333,7 +335,7 @@ union YYSTYPE
|
||||||
grib_rule *rules;
|
grib_rule *rules;
|
||||||
grib_rule_entry *rule_entry;
|
grib_rule_entry *rule_entry;
|
||||||
|
|
||||||
#line 337 "y.tab.h"
|
#line 339 "y.tab.h"
|
||||||
|
|
||||||
};
|
};
|
||||||
typedef union YYSTYPE YYSTYPE;
|
typedef union YYSTYPE YYSTYPE;
|
||||||
|
|
33
src/gribl.l
33
src/gribl.l
|
@ -71,23 +71,24 @@ IDENT {IDENT1}|{IDENT2}|{IDENT3}|{IDENT4}|{IDENT5}
|
||||||
%%
|
%%
|
||||||
|
|
||||||
|
|
||||||
"==" return EQ ;
|
"==" return EQ ;
|
||||||
">=" return GE ;
|
">=" return GE ;
|
||||||
">" return GT ;
|
">" return GT ;
|
||||||
"<=" return LE ;
|
"<=" return LE ;
|
||||||
"<" return LT ;
|
"<" return LT ;
|
||||||
"!=" return NE ;
|
"!=" return NE ;
|
||||||
"<>" return NE ;
|
"<>" return NE ;
|
||||||
"bit" return BIT ;
|
"bit" return BIT ;
|
||||||
"notbit" return BITOFF ;
|
"notbit" return BITOFF ;
|
||||||
|
|
||||||
"is" return IS ;
|
"is" return IS ;
|
||||||
"not" return NOT ;
|
"isnot" return ISNOT ;
|
||||||
"!" return NOT ;
|
"not" return NOT ;
|
||||||
"and" return AND ;
|
"!" return NOT ;
|
||||||
"&&" return AND ;
|
"and" return AND ;
|
||||||
"or" return OR ;
|
"&&" return AND ;
|
||||||
"||" return OR ;
|
"or" return OR ;
|
||||||
|
"||" return OR ;
|
||||||
|
|
||||||
"null" return NIL ;
|
"null" return NIL ;
|
||||||
"~" return DUMMY ;
|
"~" return DUMMY ;
|
||||||
|
@ -97,7 +98,7 @@ IDENT {IDENT1}|{IDENT2}|{IDENT3}|{IDENT4}|{IDENT5}
|
||||||
"length" return LENGTH ;
|
"length" return LENGTH ;
|
||||||
"lowercase" return LOWERCASE;
|
"lowercase" return LOWERCASE;
|
||||||
"if" return IF ;
|
"if" return IF ;
|
||||||
"_if" return IF_TRANSIENT ;
|
"_if" return IF_TRANSIENT ;
|
||||||
"else" return ELSE ;
|
"else" return ELSE ;
|
||||||
"unsigned" return UNSIGNED ;
|
"unsigned" return UNSIGNED ;
|
||||||
"ascii" return ASCII ;
|
"ascii" return ASCII ;
|
||||||
|
|
|
@ -191,6 +191,7 @@ static grib_hash_array_value *_reverse_hash_array(grib_hash_array_value *r,grib_
|
||||||
%token NOT
|
%token NOT
|
||||||
|
|
||||||
%token IS
|
%token IS
|
||||||
|
%token ISNOT
|
||||||
|
|
||||||
%token <str>IDENT
|
%token <str>IDENT
|
||||||
%token <str>STRING
|
%token <str>STRING
|
||||||
|
@ -819,7 +820,8 @@ condition: condition GT term { $$ = new_binop_expression(grib_parser_context,
|
||||||
| condition GE term { $$ = new_binop_expression(grib_parser_context,&grib_op_ge,&grib_op_ge_d,$1,$3); }
|
| condition GE term { $$ = new_binop_expression(grib_parser_context,&grib_op_ge,&grib_op_ge_d,$1,$3); }
|
||||||
| condition LE term { $$ = new_binop_expression(grib_parser_context,&grib_op_le,&grib_op_le_d,$1,$3); }
|
| condition LE term { $$ = new_binop_expression(grib_parser_context,&grib_op_le,&grib_op_le_d,$1,$3); }
|
||||||
| condition NE term { $$ = new_binop_expression(grib_parser_context,&grib_op_ne,&grib_op_ne_d,$1,$3); }
|
| condition NE term { $$ = new_binop_expression(grib_parser_context,&grib_op_ne,&grib_op_ne_d,$1,$3); }
|
||||||
| string_or_ident IS string_or_ident { $$ = new_string_compare_expression(grib_parser_context,$1,$3); }
|
| string_or_ident IS string_or_ident { $$ = new_string_compare_expression(grib_parser_context,$1,$3,1); }
|
||||||
|
| string_or_ident ISNOT string_or_ident { $$ = new_string_compare_expression(grib_parser_context,$1,$3,0); }
|
||||||
/*
|
/*
|
||||||
| condition IN term { $$ = new_binop_expression(grib_parser_context,grib_op_pow,$1,$3); }
|
| condition IN term { $$ = new_binop_expression(grib_parser_context,grib_op_pow,$1,$3); }
|
||||||
| condition MATCH term { $$ = new_binop_expression(grib_parser_context,grib_op_pow,$1,$3); }
|
| condition MATCH term { $$ = new_binop_expression(grib_parser_context,grib_op_pow,$1,$3); }
|
||||||
|
|
|
@ -2,6 +2,8 @@ set -xe
|
||||||
|
|
||||||
export LEX=flex
|
export LEX=flex
|
||||||
export LEX_OUT=gribl.cc
|
export LEX_OUT=gribl.cc
|
||||||
|
|
||||||
|
|
||||||
$LEX -o gribl.cc gribl.l
|
$LEX -o gribl.cc gribl.l
|
||||||
sed 's/yy/grib_yy/g' < $LEX_OUT | sed 's/static void grib_yyunput/void grib_yyunput/' > grib_lex1.cc
|
sed 's/yy/grib_yy/g' < $LEX_OUT | sed 's/static void grib_yyunput/void grib_yyunput/' > grib_lex1.cc
|
||||||
sed 's/fgetc/getc/g' < grib_lex1.cc > grib_lex.cc
|
sed 's/fgetc/getc/g' < grib_lex1.cc > grib_lex.cc
|
||||||
|
@ -18,11 +20,16 @@ sed 's/yy/grib_yy/g' < y.tab.h > grib_yacc.h
|
||||||
rm -f y.tab.c y.tab.h
|
rm -f y.tab.c y.tab.h
|
||||||
|
|
||||||
set +x
|
set +x
|
||||||
|
|
||||||
|
$LEX --version
|
||||||
|
yacc --version
|
||||||
|
|
||||||
echo "---------------------------------------------"
|
echo "---------------------------------------------"
|
||||||
# We use flex and bison
|
# We use flex and bison
|
||||||
echo "Did you use the latest YACC and FLEX modules?"
|
echo "Did you use the latest YACC and FLEX modules?"
|
||||||
echo " module avail bison"
|
echo " module avail bison"
|
||||||
echo " module avail flex"
|
echo " module avail flex"
|
||||||
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo ALL OK
|
echo ALL OK
|
||||||
|
|
|
@ -385,7 +385,11 @@ grep "MISSING" $tempOut
|
||||||
cat >$tempFilt <<EOF
|
cat >$tempFilt <<EOF
|
||||||
if (rubbish is "ppp") { print "yes"; } else { print "rubbish must fail"; }
|
if (rubbish is "ppp") { print "yes"; } else { print "rubbish must fail"; }
|
||||||
if ("ppp" is garbage) { print "yes"; } else { print "garbage must fail"; }
|
if ("ppp" is garbage) { print "yes"; } else { print "garbage must fail"; }
|
||||||
|
assert ( identifier isnot "rubbish" );
|
||||||
|
assert ( "a" isnot "A" );
|
||||||
|
assert ( identifier is "GRIB" );
|
||||||
EOF
|
EOF
|
||||||
|
cat $tempFilt
|
||||||
${tools_dir}/grib_filter $tempFilt $ECCODES_SAMPLES_PATH/GRIB2.tmpl > $tempOut 2>&1
|
${tools_dir}/grib_filter $tempFilt $ECCODES_SAMPLES_PATH/GRIB2.tmpl > $tempOut 2>&1
|
||||||
cat $tempOut
|
cat $tempOut
|
||||||
grep "rubbish must fail" $tempOut
|
grep "rubbish must fail" $tempOut
|
||||||
|
|
Loading…
Reference in New Issue