#include "semcheck.h" static int max_name_length = 0; void Cd_graph::print_fset() { char *tmp; tmp = tmpfname(); ofstream cd_ffsets_tmp(tmp); if (!cd_ffsets_tmp) { cerr << toolname << ": unable to open " << tmp << " for output."; exit(1); } cd_ffsets_tmp << "// First-sets and Follow-sets.\n" << endl; adjacencies->print_fset(cd_ffsets_tmp); cd_ffsets_tmp.close(); mv_if_change(mv_interactive,tmp,"notmod/cds/cd-ffsets"); free(tmp); } void Adjacency_Nlist::print_fset(ostream& f_set) { Adjacency_list_iterator next_arg(*this); Adjacency_ each_arg; while (each_arg = next_arg()) if (max_name_length < strlen(each_arg->get_source()->get_vertex_name()->get_val())) max_name_length = strlen(each_arg->get_source()->get_vertex_name()->get_val()); Adjacency_list_iterator next_arg2(*this); Adjacency_ each_arg2; while (each_arg2 = next_arg2()) { each_arg2->print_fset(f_set); } } void Adjacency::print_fset(ostream& f_set) { int length = strlen(source->get_vertex_name()->get_val()); int delta = max_name_length - length; int ident = length; source->pp(f_set); /* while (delta--) f_set << " "; */ f_set << " : firstset = { "; if (firstset) { if (firstset->number_of_parts()>0) /* firstset->print_fset(max_name_length+18); */ firstset->print_fset(length+18,f_set); } else f_set << "***** not computed *****"; f_set << "}" << endl; while (ident--) f_set << " "; /* delta = max_name_length - length; while (delta--) f_set << " "; */ f_set << " followset = { "; if (followset) { if (followset->number_of_parts()>0) /* followset->print_fset(max_name_length+18); */ followset->print_fset(length+18,f_set); } else f_set << "***** not computed *****"; f_set << " } " << endl; } void Ll1SetElement_Comma_list::print_fset(int start,ostream& f_set) { Ll1SetElement_list_iterator next_elt(*this); Ll1SetElement_ each_elt; int tmp = start; int column = start; while (each_elt = next_elt()) { column = tmp; tmp = each_elt->print_fset(column,start,f_set); } } int Ll1SetElement::print_fset(int column,int start,ostream& f_set) { int string_len = this->string_len(); if (column+string_len+6> 60) { f_set << endl; while (start--) f_set << " "; this->pp(f_set); f_set << " "; return start+string_len+24; } else { this->pp(f_set); f_set << " "; return column+string_len+4; } } int Ll1SetElement::string_len() { if (token) return strlen(token->get_val()+2); if (empty) return 9; if (eof) return 5; if (terminal) return terminal->string_len(); } int TClassTerminal::string_len() { return 15+strlen(terminalName->get_val()); }