/* Zz Dynamic Parser Library Copyright (C) 1989 - I.N.F.N - S.Cabasino, P.S.Paolucci, G.M.Todesco The Zz Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The Zz Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* Zz library exported functions $Id: zz.h,v 1.9 2002/06/03 11:06:13 kibun Exp $ */ #ifndef __ZZ_H__ #define __ZZ_H__ //#include "zlex.h" //#include "trace.h" #include /* for int32_t, ... */ #include /* for FILE ... */ #ifdef __cplusplus extern "C" { #endif const char* zz_version(void); void zz_init(void); /* "kernel" scope open/close */ void zz_set_kernel_flag(int bool_value); void zz_set_output(const char* output_filename); void zz_set_output_stream(FILE* output_stream); int zz_parse_string(const char *s); int zz_parse_file(const char* input_source_filename); int zz_parse_pipe(void); /* this one is really in libozzi.xx */ int zz_parse_tt(void); void zz_set_default_extension(const char* include_file_def_extension); void zz_set_default_include_dir(const char* default_include_dir); void zz_set_prompt(const char *prompt); const char* zz_get_prompt(void); /* error reporting related stuff */ int zz_get_param_stack_depth(); int zz_get_error_number(); /* scanner extension */ struct s_content; struct s_tag; /* struct s_content accessors */ long zz_scnt_get_lvalue (struct s_content *); int32_t zz_scnt_get_ivalue (struct s_content *); float zz_scnt_get_fvalue (struct s_content *); void* zz_scnt_get_pvalue (struct s_content *); char* zz_scnt_get_svalue (struct s_content *); double zz_scnt_get_dvalue (struct s_content *); int64_t zz_scnt_get_llvalue(struct s_content *); long zz_scnt_getv_lvalue (struct s_content *, int); int32_t zz_scnt_getv_ivalue (struct s_content *, int); float zz_scnt_getv_fvalue (struct s_content *, int); void* zz_scnt_getv_pvalue (struct s_content *, int); char* zz_scnt_getv_svalue (struct s_content *, int); double zz_scnt_getv_dvalue (struct s_content *, int); int64_t zz_scnt_getv_llvalue(struct s_content *, int); void zz_scnt_set_lvalue (struct s_content *, long ); void zz_scnt_set_ivalue (struct s_content *, int32_t); void zz_scnt_set_fvalue (struct s_content *, float ); void zz_scnt_set_pvalue (struct s_content *, void* ); void zz_scnt_set_svalue (struct s_content *, char* ); void zz_scnt_set_dvalue (struct s_content *, double ); void zz_scnt_set_llvalue(struct s_content *, int64_t); const char* zz_scnt_get_tag_name(struct s_content *); typedef int (*zz_tag_sprint_cb)(char *, struct s_content *); typedef int (*zz_tag_fprint_cb)(FILE *, struct s_content *); typedef int (*zz_tag_cdtor)(struct s_content *cnt, const char *param_name); typedef struct s_content * (*zz_tag_cast)(struct s_content* src, struct s_tag* tgt_type_tag, struct s_content* tgt); int zz_lex_add_new_tag(const char* tag_name, zz_tag_sprint_cb, zz_tag_fprint_cb, zz_tag_cdtor pctor, zz_tag_cdtor pdtor, zz_tag_cast cst); #define zz_lex_add_new_tag2(TAG_NAME, TAG_SP, TAG_FP) zz_lex_add_new_tag(TAG_NAME, TAG_SP, TAG_FP, 0, 0) int zz_lex_remove_tag(const char* tag_name); /* tracing stuff */ #define TRACE_REDUCE 0x1 #define TRACE_ZZACTION 0x2 #define TRACE_SCOPE 0x4 #define TRACE_LRSTACK 0x8 #define TRACE_ALL (TRACE_REDUCE|TRACE_ZZACTION|TRACE_SCOPE|TRACE_LRSTACK) void zz_set_trace_mask(int mask); #ifdef __cplusplus } #endif #endif /* __ZZ_H__ */