/*********************************************************************/ /* pC++/Sage++ Copyright (C) 1993 */ /* Indiana University University of Oregon University of Rennes */ /*********************************************************************/ #include "inc.h" #include "defines.h" #include "db.h" extern int yylineno; extern PTR_FILE fi; /* In the following "set" means set the value to YES, or 1 */ #ifndef __SPF_BUILT_IN_PARSER int debug; #endif int errline; /* line number of 1st error */ int inioctl; /* set if processing I/O control stmt */ int needkwd; /* set if stmt needs keyword */ int optkwd; /* set if stmt needs optional keyword */ int implkwd; /* set if processing IMPLICIT statement */ /*!!!*/ int opt_kwd_; /* set if stmt needs optional keyword (fdvm.gram)*/ int opt_in_out; /* set if stmt needs keyword IN or OUT*/ int as_op_kwd_; /* set if stmt needs keyword ASSIGNMENT or OPERATOR */ int opt_kwd_hedr; /* set if stmt needs after type specification */ int opt_kwd_r; /* set if stmt needs optional keyword followed by '(' (fdvm.gram)*/ int optcorner; /* set if stmt needs optional keyword CORNER(fdvm.gram)*/ int optcall; /* set if stmt needs optional "call" */ int opt_l_s; /* set if stmt needs optional "location" or "submachine" */ int colon_flag; /* set if stmt needs keyword followed by colon. */ int is_openmp_stmt = 0; /* set if OpenMP stmt*/ /*OMP*/ int operator_slash; /*OMP*/ int nioctl; int data_stat; extern int yydebug; long yystno = 0; int yyleng ; char yyquote ; int yylisting = 0; /* set if listing to stdio required */ int yylonglines = 0; /* set if non-standard line length allowed */ int prflag; int dorange; /* current do range label */ int undeftype = NO; /* set if IMPLICIT NONE */ int maxdim = 15; /* max allowable number of dimensions */ int nowarnflag = NO; /* set if don't want warning messages */ int shiftcase = YES; /* convert variable to lower case */ int num_files; char intonly; /* set if only integer param allowed */ #if __SPF_BUILT_IN_PARSER && !_WIN32 extern int warn_all; /* set if -w option specified*/ #else int warn_all; /* set if -w option specified*/ #endif int errcnt = 0; /* error count */ int nwarn = 0; /* number of warning */ int mod_offset; /* line no offset of current module */ int num_bfnds; /* total # of bif nodes */ int num_llnds; /* total # of low level nodes */ int num_symbs; /* total # of symbol nodes */ int num_types; /* total # of types nodes */ int num_blobs; /* total # of blob nodes */ int num_sets; /* total # of set nodes */ int num_cmnt; int num_def; /* total # of dependncy nodes */ int num_dep; int num_deflst; int num_label; /* total # of label nodes */ PTR_LLND first_unresolved_call = LLNULL, last_unresolved_call = LLNULL; PTR_SYMB global_list; PTR_BFND head_bfnd, /* start of bfnd chain */ cur_bfnd, /* point to current bfnd */ pred_bfnd, /* used in finding the predecessor */ last_bfnd; PTR_LLND head_llnd, cur_llnd; PTR_SYMB head_symb, cur_symb; PTR_TYPE head_type, cur_type; PTR_LABEL head_label, cur_label, thislabel; PTR_BLOB head_blob, cur_blob; PTR_SETS head_sets, cur_sets; PTR_DEF head_def, cur_def; PTR_FNAME head_file, cur_thread_file, the_file; PTR_DEFLST head_deflst, cur_deflst; PTR_DEP head_dep, cur_dep, pre_dep; PTR_CMNT head_cmnt, cur_cmnt; PTR_BFND global_bfnd; PTR_SYMB star_symb; PTR_TYPE vartype; PTR_CMNT comments; #if __SPF_BUILT_IN_PARSER && !_WIN32 extern PTR_CMNT cur_comment; #else PTR_CMNT cur_comment; #endif PTR_TYPE make_type(); PTR_SYMB make_symb(); PTR_BFND get_bfnd(); PTR_BLOB make_blob(); void init_hash(); void init_scope_table(); PTR_TYPE global_int, global_float, global_double, global_char, global_string; PTR_TYPE global_bool, global_complex, global_dcomplex, global_gate, global_event, global_sequence,global_default,global_string_2; char yytext[1000]; /* text consumed for current lexeme */ char *infname; #if __SPF_BUILT_IN_PARSER && !_WIN32 extern char saveall; /* set if "SAVE ALL" */ extern int privateall; /* set if "PRIVATE ALL" */ #else char saveall; /* set if "SAVE ALL" */ int privateall; /* set if "PRIVATE ALL" */ #endif char substars; /* set if * parameters seen */ int blklevel; /* current block level */ int parstate; /* current parser's state */ PTR_TYPE impltype[26]; /* implicit type for 'a' to 'z' */ int procno; /* procedure # in current file */ int proctype; /* procedure type */ char *procname; /* procedure name */ int procclass; int nentry; /* # of entries */ char multitype; /* * General initialization routine */ void initialize() { errcnt = 0; /* error count */ nwarn = 0; /* number of warning */ parstate = OUTSIDE; /* current parser's state */ yylineno = 0; /* global line no from lex */ mod_offset = 0; num_files = 0; num_bfnds = 0; /* total # of bif nodes */ num_llnds = 0; /* total # of low level nodes */ num_symbs = 0; /* total # of symbol nodes */ num_types = 0; /* total # of types nodes */ num_blobs = 0; /* total # of blob nodes */ num_sets = 0; /* total # of set nodes */ num_cmnt = 0; num_def = 0; /* total # of dependncy nodes */ num_dep = 0; num_deflst = 0; num_label = 0; /* total # of label nodes */ global_list = (PTR_SYMB) NULL; head_bfnd = BFNULL; cur_bfnd = BFNULL; pred_bfnd = BFNULL; /* used in finding the predecessor */ last_bfnd = BFNULL; head_llnd = LLNULL; cur_llnd = LLNULL; head_symb = SMNULL; cur_symb = SMNULL; head_cmnt = CMNULL; cur_cmnt = CMNULL; head_type = TYNULL; cur_type = TYNULL; head_label = LBNULL; cur_label = LBNULL; thislabel = LBNULL; head_blob = BLNULL; cur_blob = BLNULL; head_sets = (PTR_SETS)NULL; cur_sets = (PTR_SETS)NULL; head_file = (PTR_FNAME)NULL; head_def = (PTR_DEF)NULL; cur_def = (PTR_DEF)NULL; head_deflst = (PTR_DEFLST)NULL; cur_deflst = (PTR_DEFLST)NULL; head_dep = (PTR_DEP)NULL; cur_dep = (PTR_DEP)NULL; pre_dep = (PTR_DEP)NULL; global_bfnd = BFNULL; comments = CMNULL; cur_comment = CMNULL; global_int = make_type(fi,T_INT); global_float = make_type(fi,T_FLOAT); global_double = make_type(fi,T_DOUBLE); global_char = make_type(fi,T_CHAR); global_string = make_type(fi,T_STRING); global_bool = make_type(fi,T_BOOL); global_complex = make_type(fi,T_COMPLEX); global_dcomplex = make_type(fi,T_DCOMPLEX); global_gate = make_type(fi,T_GATE); global_event = make_type(fi,T_EVENT); global_sequence = make_type(fi,T_SEQUENCE); global_default = make_type(fi,DEFAULT); global_string_2 = make_type(fi,T_STRING); global_string_2->entry.Template.dummy1=2; star_symb = make_symb(fi,DEFAULT, "*"); fi->global_bfnd = global_bfnd = get_bfnd(fi,GLOBAL, SMNULL, LLNULL, LLNULL, LLNULL); global_bfnd->filename=(PTR_FNAME)NULL;/*later we put something there*/ cur_blob = global_bfnd->entry.Template.bl_ptr1 = make_blob (fi,BFNULL, BLNULL); pred_bfnd = global_bfnd; init_hash(); init_scope_table(); } /* * Set implicit type and length for each alphabetic chars in the range c1 - c2 */ void setimpl(type, c1, c2) PTR_TYPE type; int c1, c2; { register int i; char buff[100]; void err(); if (c1 == 0 || c2 == 0) return; if (c1 > c2) { (void)sprintf(buff, "characters out of order in implicit:%c-%c", c1, c2); err(buff); } else { for (i = c1; i <= c2; ++i) { impltype[i - 'a'] = type; } } } /* * Initialization routine for each new program unit */ void procinit() { parstate = OUTSIDE; blklevel = 1; saveall = NO; privateall = 0; substars = NO; nwarn = 0; thislabel = LBNULL; needkwd = 0; /*!!!*/ opt_kwd_ = 0; opt_kwd_r = 0; optcorner = 0; ++procno; proctype = T_UNKNOWN; procname = "MAIN_ "; nentry = 0; multitype = NO; blklevel = 1; dorange = 0; if (undeftype) setimpl(global_default, 'a', 'z'); else { setimpl(global_float, 'a', 'z'); setimpl(global_int, 'i', 'n'); } }