// This may look like C code, but it is really -*- C++ -*- // A Bison++ parser, made from vhdl_par.y #ifndef VHDL_PAR_Y #define VHDL_PAR_Y typedef union{ id_rec *id_rec_ptr; input* input_ptr; module_rec *MR_ptr; select_stack_rec *SSR_ptr; type_mark *type_mark_ptr; type_decl *type_decl_ptr; branch_val_rec *BVR_ptr; constant_rec *CR_ptr; range_rec *RR_ptr; int value; char *name; } vhdl_par_YYSTYPE; typedef struct vhdl_par_YYLTYPE { int timestamp; int first_line; int first_column; int last_line; int last_column; char *text; }; #ifdef ESKIT class vhdl_par : public remote_base { #else class vhdl_par { #endif private: int yychar; vhdl_par_YYSTYPE yylval; vhdl_par_YYLTYPE yylloc; int yynerrs; #ifdef ESKIT local_streams Cout; fileBase* yyin; fileBase* yyout; fileBase* Stderr; #else FILE *yyin, *yyout={stdout}; #endif protected: public: vhdl_par(); int yyparse(); void yyerror(char *); int yylex(); ~vhdl_par(); void yyterminator(); /* lex routines */ int yyback(int* ,int); int yyinput(); int yyoutput(int); int yyunput(int); int yylook(); int yywrap(){INT_RETURN(1);} input *source_id(char*); input *source_bit(int ,int); input *source_int(int); input *source_arr(char* ,input*); input *mk_operator(int ,input* ,input*); input *add_actual(input* ,input*); constant_rec *add_constant(int ,int); constant_rec *update_const_width(int ,constant_rec*); constant_rec* str2num(int, char*); constant_rec* append_cr(constant_rec* ,constant_rec*); carrier_info *copy_ci(carrier_info*); module_rec *pop(); module_rec *cl_module(); select_stack_rec *mk_select_op(input*); symbol_table_rec *get_STR_ptr(char*); symbol_table_rec *get_op_inp_STR_ptr(char*); type_mark *typemark(int ,int, int ,type_mark*); type_mark *basetype(int ,int); type_mark *get_type_mark(char*); type_mark *resolved_type(char* ,type_mark*); id_rec *identifier_list(char* ,id_rec*); op_erator *get_op_ptr(char* ,op_erator*); op_erator *mk_par_ENTER(module_rec*); branch_val_rec *add_case_value(int ,branch_val_rec*); range_rec *mk_range_rec(int ,int); input *range_spec(input* ,range_rec*); int get_width(input*); int _index(int ,int ,int); int log2(int); int log10(int); int two_to_pow(int); int ten_to_pow(int); int bin_to_int(int); int check_for_function_name(char*); char *rename(char* ,int); char *mk_ext(int ,int); char *reverse(char*); void mk_entity(char*); void mk_interface(id_rec* ,int ,type_mark*); void mk_alias(char* ,type_mark* ,char* ,int); void mk_reg(id_rec* ,type_mark* ,constant_rec* ,int); void mk_formal_param(int ,id_rec* ,int ,type_mark*); void mk_type_decl(char* ,type_mark*); void simple_assignment(int ,char* ,input*); void array_assignment(int ,char* ,input* ,input*); void procedure_call(module_rec* ,input*); void push(module_rec*); void update_parent(symbol_table_rec* ,select_stack_rec*); void push_SSR(select_stack_rec*); void pop_SSR(); void cl_select_op(select_stack_rec*); void mk_if_branch(int); void mk_branch(branch_val_rec*); void mk_loop_module(char*); void mk_wait_module(id_rec*); void mk_while_condition(input*); void loop_or_wait_stmnt(module_rec*); void mk_ENTER(module_rec*); void mk_conc_stmnt_module(char* ,int); void mk_procedure_module(char*); void update_carrier_info(symbol_table_rec* ,char*); void free_ci(carrier_info*); void free_id(id_rec*); void initialize_storage(symbol_table_rec* ,constant_rec*); void delete_const_rec(constant_rec*); void conc_stmnt(module_rec*); void mk_arch_module(char* ,char*); void st_arch_stmnt_part(); void cl_arch_module(); const int ENTITY = 258; const int IS = 259; const int FINISH = 260; const int PORT = 261; const int OPENBR = 262; const int CLOSEBR = 263; const int COLON = 264; const int IN = 265; const int OUT = 266; const int INOUT = 267; const int BIT = 268; const int BIT_VECTOR = 269; const int INTEGER = 270; const int TO = 271; const int COMMA = 272; const int SEMI = 273; const int DOWNTO = 274; const int SIGNAL = 275; const int VARIABLE = 276; const int AND = 277; const int OR = 278; const int NOT = 279; const int PLUS = 280; const int MINUS = 281; const int MULT = 282; const int DIV = 283; const int GT = 284; const int LT = 285; const int EQ = 286; const int PROCESS = 287; const int BEG = 288; const int ARCHITECTURE = 289; const int OF = 290; const int IF = 291; const int THEN = 292; const int ELSE = 293; const int LOOP = 294; const int WHILE = 295; const int ARRAY = 296; const int ELSIF = 297; const int ALIAS = 298; const int UNTIL = 299; const int ON = 300; const int FOR = 301; const int WAIT = 302; const int QUOTE = 303; const int PACKAGE = 304; const int USE = 305; const int TYPE = 306; const int FUNCTION = 307; const int SUBTYPE = 308; const int RSHIFT = 309; const int LSHIFT = 310; const int AFTER = 311; const int QUIET = 312; const int STABLE = 313; const int LIBRARY = 314; const int CONCAT = 315; const int XOR = 316; const int XNOR = 317; const int NAND = 318; const int NOR = 319; const int BIN = 320; const int HEX = 321; const int OCT = 322; const int DEC = 323; const int TRANSPORT = 324; const int BLCK = 325; const int CASE = 326; const int WHEN = 327; const int OTHERS = 328; const int PIPE = 329; const int PROCEDURE = 330; const int PROC_CALL = 331; const int Identifier = 332; const int Const = 333; const int ZERO = 334; const int ONE = 335; const int OTHER = 336; }; #endif VHDL_PAR_Y