/*Genera lo schema della tupla e ritorna il codice*/ Code tuple_const(Pnode tuple_const_node,Pschema schema){ //Non ci sono vincoli semantici #ifdef DEBUG_TUPLE_CONST printf( "TUPLE_CONST - enter\n"); #endif //Preparo il codice della tupla Code tuple_const_code; tuple_const_code.head = NULL; //Punto al primo elemento della tupla Pnode atomic_const_node = tuple_const_node->child; //Preparo la variabile che contiene il codice dell'id Code atomic_const_code; Pschema prev_schema = schema; do{ //Calcolo il codice e lo schema della prima costante switch(atomic_const_node->type){ case (N_INTCONST): atomic_const_code = makecode1(T_IATTR,qualifier(atomic_const_node)); prev_schema->type = INTEGER; break; case (N_BOOLCONST): atomic_const_code = makecode1(T_IATTR,qualifier(atomic_const_node)); prev_schema->type = BOOLEAN; break; case (N_STRCONST): atomic_const_code = make_sattr(valname(atomic_const_node)); prev_schema->type = STRING; break; } //Appendo il codice della costante al codice della tupla tuple_const_code = appcode(tuple_const_code,atomic_const_code); //Passo al fratello atomic_const_node = atomic_const_node->brother; //Creo un nuovo schema if (atomic_const_node!=NULL){ Pschema newSchema = (Pschema) newmem(sizeof(Schema)); prev_schema->next = newSchema; prev_schema = prev_schema->next; } }while(atomic_const_node!=NULL); #ifdef DEBUG_TUPLE_CONST printf( "TUPLE_CONST - exit\n"); #endif return tuple_const_code; }
/*Ritorna lo schema e imposta il tipo nel campo type di schema*/ Pschema atomic_type(Pnode atomic_type_node){ #ifdef DEBUG_ATOMIC_TYPE printf( "ATOMIC_TYPE_NODE - enter\n"); #endif //Creo lo schema Pschema schema = (Pschema) newmem(sizeof(Schema)); //Imposto tutti i campi a null schema->name = NULL; schema->next = NULL; //Imposto il type schema->type = qualifier(atomic_type_node); #ifdef DEBUG_ATOMIC_TYPE printf( "ATOMIC_TYPE_NODE - exit\n"); #endif return schema; }
/* Ritorna lo schema del table_type. */ Pschema table_type(Pnode type_node){ #ifdef DEBUG_TABLE_TYPE printf( "TABLE_TYPE - enter\n"); #endif //Creo lo schema Pschema schema = (Pschema) newmem(sizeof(Schema)); schema->name = NULL; //Imposto il type (che sarà TABLE) schema->type = qualifier(type_node); //Genero la lista di attributi schema->next = attr_list(type_node->child); #ifdef DEBUG_TABLE_TYPE printf( "TABLE_TYPE - ok attr_list definition\n"); #endif return schema; }
void SyntaxAnalyzer::decl() { cout << "<Declaration> -> <Qualifier> <IDs>" << endl; string type = currentToken.lexeme(); qualifier(); ids(type); }