$include "defs.icn" $include "global_vars.icn" procedure open_my_files() if not(errfile:= open("russ_err.tmp","w")) then stop("cannot open russ_err.tmp") if not(reduce := open("reduce.tmp","w")) then stop("cannot open reduce.tmp") if not(progress := open("progress.tmp","w")) then stop("cannot open progress.tmp") if not(debug_file := open("debug.tmp","w")) then stop("cannot open debug.tmp") if not(stats := open("stats.tmp","w")) then stop("cannot open stats.tmp") # if not(nodes := open("nodes.tmp","w")) then stop("cannot open nodes.tmp") if not(ccode_file := open("ccode.tmp","w")) then stop("cannot open ccode.tmp") if not(nodes_created_file := open("nodes.tmp","w")) then stop("cannot open nodes.tmp") if not(lists_created_file := open("lists.tmp","w")) then stop("cannot open lists.tmp") if not(cons_file := open("cons.tmp","w")) then stop("cannot open cons.tmp") return end procedure consinfo(msg) write(cons_file,msg) write(msg) write(&errout,msg) end procedure listinfo(msg) write(lists_created_file,msg) write(msg) write(&errout,msg) end procedure nodeinfo(msg) write(nodes_created_file,msg) write(msg) write(&errout,msg) end procedure yyinfo(msg) static counter initial counter := 0 counter +:= 1 if counter > 100000 then rpt_err("PROBIBLE INFINITE LOOP max 100000 reached") write("INFO: " || msg ) write(errfile, "INFO: " || msg) write( debug_file , "INFO: "|| msg ) return end procedure yywarn(msg) write( "WARNING: " || msg) write(progress, "WARNING: " || msg) write(errfile , "WARNING: " || msg) write(reduce , "WARNING: " || msg) return end procedure yyperror(msg) write( "PERROR: " || msg) write(progress, "PERROR: " || msg) write(errfile , "PERROR: " || msg) write(reduce , "PERROR: " || msg) rpt_stats() exit(1) end procedure yyerror(msg) write( "ERROR: " || msg) write(progress, "ERROR: " || msg) write(errfile , "ERROR: " || msg) write(reduce , "ERROR: " || msg) return end procedure yylexdebug(msg) write( "LEXDEBUG: yystate = " || yystate || " yychar = " || yychar ) write(progress, "LEXDEBUG: yystate = " || yystate || " yychar = " || yychar ) write(errfile , "LEXDEBUG: yystate = " || yystate || " yychar = " || yychar ) write(reduce , "LEXDEBUG: yystate = " || yystate || " yychar = " || yychar ) return end procedure rpt_err(msg) write( "ERROR: " || msg) write(progress, "ERROR: " || msg) write(errfile , "ERROR: " || msg) write(reduce , "ERROR: " || msg) rpt_stats() exit(1) end procedure rpt_stats() statsline("Item","Count") statsline("Line Count",line_cnt) statsline("Character Count",char_cnt) statsline("Token Count",token_cnt) statsline("Reserved Id Count",reserved_id_cnt) statsline("Reserved Op Count",reserved_op_cnt) statsline("Defined Id Count",defined_id_cnt) statsline("Defined Op Count",defined_op_cnt) statsline("Unique Symbol Count",stt_unique_cnt) statsline("Referenced Symbol Count",stt_reference_cnt) statsline("Numeral Count",numeral_cnt) statsline("Seperator Count",seperator_cnt) statsline("Nodes Total Count",nodes_total_cnt) statsline("Nodes Made Count",nodes_made_cnt) statsline("Comments Count",comments_cnt) statsline("Single Quoted Count",sing_quoted_cnt) statsline("Double Quoted Count",dbl_quoted_cnt) statsline("Lists Total Count",lists_total_cnt) statsline("Lists Made Count",lists_made_cnt) statsline("RIC Op Codes Count",RIC_op_code_cnt) statsline("RIC Table Entry Count",RIC_table_entry_cnt) statsline("Parser Actions",parser_actions_cnt) statsline("YYN Compute Count",yyn_compute_cnt) statsline("Newstate Count",newstate_cnt) statsline("Setstate Count",setstate_cnt) statsline("Backup Count",backup_cnt) statsline("Default Count",default_cnt) statsline("Reduce Count",reduce_cnt) statsline("Errlab Count",errlab_cnt) statsline("Errlab1 Count",errlab1_cnt) # dump_value_stack() # dump_state_stack() return end procedure statsline(item,count) write(stats, item || repl(" ",40 - *item) || right(count,6)) return end procedure yyclearin() yychar:=-1 return end procedure is_present(x) if x = PRESENT then return else fail end ############################################################## #STUBS ############################################################## # lock is dummy function procedure lock(it) return it end procedure unlock(it) return it end procedure rpt_action(yyn) write(reduce,"action yyn = " || yyn) end procedure vfree() # do nothing we are counting on unicons garbage collection return end procedure free_array(ar) # do nothing we are counting on unicons garbage collection end # Followinf to avoid changes to grammar.icn after I changed these to methods procedure length(l) local x x := l.length() return x end procedure first(l) l.first() end procedure last(l) l.last() end procedure in(element,list) local i i := 1 while (element ~= list[i] & list[i] ~= LIST_END) do { i +:= 1 } return (element = list[i]) end