Ejemplo n.º 1
0
/*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;
}
Ejemplo n.º 2
0
/*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;
}
Ejemplo n.º 3
0
/*
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;
}
Ejemplo n.º 4
0
void SyntaxAnalyzer::decl() {
	cout << "<Declaration> -> <Qualifier> <IDs>" << endl;
	string type = currentToken.lexeme();
	qualifier();
	ids(type);
}