diff options
Diffstat (limited to 'hl/src/H5LTanalyze.l')
-rw-r--r-- | hl/src/H5LTanalyze.l | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/hl/src/H5LTanalyze.l b/hl/src/H5LTanalyze.l new file mode 100644 index 0000000..364272f --- /dev/null +++ b/hl/src/H5LTanalyze.l @@ -0,0 +1,161 @@ +%{ +#include <string.h> +#include<hdf5.h> +#include "y.tab.h" +#undef YY_INPUT +#define YY_INPUT(b, r, ms) (r=my_yyinput(b, ms)) +#define token(x) (int)x +extern char *myinput; +extern int input_len; + +#define STACK_SIZE 16 + +/*variables for compound type*/ +extern struct cmpd_info { + hid_t id; + hbool_t is_field; + hbool_t first_memb; +}; +extern struct cmpd_info cmpd_stack[STACK_SIZE]; +extern int csindex; + +/*variables for array type*/ +extern struct arr_info { + hsize_t dims[H5S_MAX_RANK]; + int ndim; + hbool_t is_dim; +}; +extern struct arr_info arr_stack[STACK_SIZE]; +extern int asindex; + +/*variables for enumerate type*/ +extern hbool_t is_enum; +extern hbool_t is_enum_memb; + +/*variables for string type*/ +extern hbool_t is_str_size; +extern hbool_t is_str_pad; + +/*variables for opaque type*/ +extern hbool_t is_opq_size; +extern hbool_t is_opq_tag; + +hbool_t first_quote = 1; + +%} + +%s TAG_STRING + +%% + +H5T_STD_I8BE {return token(H5T_STD_I8BE_TOKEN);} +H5T_STD_I8LE {return token(H5T_STD_I8LE_TOKEN);} +H5T_STD_I16BE {return token(H5T_STD_I16BE_TOKEN);} +H5T_STD_I16LE {return token(H5T_STD_I16LE_TOKEN);} +H5T_STD_I32BE {return token(H5T_STD_I32BE_TOKEN);} +H5T_STD_I32LE {return token(H5T_STD_I32LE_TOKEN);} +H5T_STD_I64BE {return token(H5T_STD_I64BE_TOKEN);} +H5T_STD_I64LE {return token(H5T_STD_I64LE_TOKEN);} + +H5T_STD_U8BE {return token(H5T_STD_U8BE_TOKEN);} +H5T_STD_U8LE {return token(H5T_STD_U8LE_TOKEN);} +H5T_STD_U16BE {return token(H5T_STD_U16BE_TOKEN);} +H5T_STD_U16LE {return token(H5T_STD_U16LE_TOKEN);} +H5T_STD_U32BE {return token(H5T_STD_U32BE_TOKEN);} +H5T_STD_U32LE {return token(H5T_STD_U32LE_TOKEN);} +H5T_STD_U64BE {return token(H5T_STD_U64BE_TOKEN);} +H5T_STD_U64LE {return token(H5T_STD_U64LE_TOKEN);} + +H5T_NATIVE_CHAR {return token(H5T_NATIVE_CHAR_TOKEN);} +H5T_NATIVE_SCHAR {return token(H5T_NATIVE_SCHAR_TOKEN);} +H5T_NATIVE_UCHAR {return token(H5T_NATIVE_UCHAR_TOKEN);} +H5T_NATIVE_SHORT {return token(H5T_NATIVE_SHORT_TOKEN);} +H5T_NATIVE_USHORT {return token(H5T_NATIVE_USHORT_TOKEN);} +H5T_NATIVE_INT {return token(H5T_NATIVE_INT_TOKEN);} +H5T_NATIVE_UINT {return token(H5T_NATIVE_UINT_TOKEN);} +H5T_NATIVE_LONG {return token(H5T_NATIVE_LONG_TOKEN);} +H5T_NATIVE_ULONG {return token(H5T_NATIVE_ULONG_TOKEN);} +H5T_NATIVE_LLONG {return token(H5T_NATIVE_LLONG_TOKEN);} +H5T_NATIVE_ULLONG {return token(H5T_NATIVE_ULLONG_TOKEN);} + +H5T_IEEE_F32BE {return token(H5T_IEEE_F32BE_TOKEN);} +H5T_IEEE_F32LE {return token(H5T_IEEE_F32LE_TOKEN);} +H5T_IEEE_F64BE {return token(H5T_IEEE_F64BE_TOKEN);} +H5T_IEEE_F64LE {return token(H5T_IEEE_F64LE_TOKEN);} +H5T_NATIVE_FLOAT {return token(H5T_NATIVE_FLOAT_TOKEN);} +H5T_NATIVE_DOUBLE {return token(H5T_NATIVE_DOUBLE_TOKEN);} +H5T_NATIVE_LDOUBLE {return token(H5T_NATIVE_LDOUBLE_TOKEN);} + +H5T_STRING {return token(H5T_STRING_TOKEN);} +STRSIZE {return token(STRSIZE_TOKEN);} +STRPAD {return token(STRPAD_TOKEN);} +CSET {return token(CSET_TOKEN);} +CTYPE {return token(CTYPE_TOKEN);} +H5T_STR_NULLTERM {return token(H5T_STR_NULLTERM_TOKEN);} +H5T_STR_NULLPAD {return token(H5T_STR_NULLPAD_TOKEN);} +H5T_STR_SPACEPAD {return token(H5T_STR_SPACEPAD_TOKEN);} +H5T_CSET_ASCII {return token(H5T_CSET_ASCII_TOKEN);} +H5T_C_S1 {return token(H5T_C_S1_TOKEN);} +H5T_FORTRAN_S1 {return token(H5T_FORTRAN_S1_TOKEN);} +H5T_VARIABLE {return token(H5T_VARIABLE_TOKEN);} + +H5T_COMPOUND {return token(H5T_COMPOUND_TOKEN);} +H5T_ENUM {return token(H5T_ENUM_TOKEN);} +H5T_ARRAY {return token(H5T_ARRAY_TOKEN);} +H5T_VLEN {return token(H5T_VLEN_TOKEN);} + +H5T_OPAQUE {return token(H5T_OPAQUE_TOKEN);} +OPQ_SIZE {return token(OPQ_SIZE_TOKEN);} +OPQ_TAG {return token(OPQ_TAG_TOKEN);} + +[0-9]+ { + if(is_str_size || (is_enum && is_enum_memb) || + is_opq_size || (asindex>-1 && arr_stack[asindex].is_dim)) { + yylval.ival = atoi(yytext); + return NUMBER; + } else + REJECT; + } + +"\"" { + /*if it's first quote, and is a opaque tag or an enum symbol*/ + if((is_opq_tag || is_enum || (csindex>-1 && cmpd_stack[csindex].is_field)) && first_quote) { + first_quote = 0; + BEGIN TAG_STRING; + } else /*if it's second quote*/ + first_quote = 1; + return token('"'); + } +<TAG_STRING>[^\"]+ { + yylval.sval = strdup(yytext); + BEGIN INITIAL; + return STRING; + } + +"{" {return token('{');} +"}" {return token('}');} +"[" {return token('[');} +"]" {return token(']');} +";" {return token(';');} +[ \t\n]* ; +"\n" { return 0; } + +%% +int my_yyinput(char *buf, int max_size) +{ + int ret; + + memcpy(buf, myinput, input_len); + ret = input_len; + return ret; +} + +yyerror(msg) +{ + printf("ERROR: %s before \"%s\".\n", msg, yytext); +} + +yywrap() +{ + return(1); +} |