Newsgroup: it.comp.lang.c
Titolo: Interprete assembler

Devo chiedervi di cuore un aiuto: devo realizzare un progetto che consiste
nel completare un programma che realizza un interprete assembler. Esso è
costituito da più files ed è un po' complicato per me spiegare di preciso
i vari problemi che ho riscontrato. Ve ne propongo uno tra tutti sperando
di riuscira a dare tutte le informazioni necessarie per risolverlo.
Devo realizzare il file input_output_unit.C dati i seguenti files:
#ifndef VALORI         //valori.h
#define VALORI
enum TipoValore{INT,FLOAT,BOOL,INDEF};
struct Valore {
  TipoValore tipo;
  union {
    int vint;
    float vfloat;
    bool vbool;
  };
  Valore(TipoValore t = INDEF): tipo(t) {}
  Valore(int vi): tipo(INT), vint(vi) {}
  Valore(float vf): tipo(FLOAT), vfloat(vf) {}
  Valore(bool vb): tipo(BOOL), vbool(vb) {}
};
class Istruzione;
typedef Istruzione * IstrPointer;
#endif
#ifndef BUS_UNIT              //bus_unit.h
#define BUS_UNIT
#include <string>
#include "valori.h"
class InputOutputUnit;
class MemoryUnit;
class BusUnit {
  InputOutputUnit * io;
  MemoryUnit * mem;
 public:
  BusUnit(MemoryUnit * um, InputOutputUnit * uio) :
     mem(um), io(uio) {}
  // accesso a MemoryUnit
  void putVariabile(string&, Valore&);
  Valore getVariabile(string&);
  TipoValore getTipo(string&);
  void putEtichetta(string&);
  void putIstruzione(IstrPointer);
  int getStart();
  int getEnd();
  int getEtichetta(string&);
  IstrPointer getIstruzione(int);
  // accesso a InputOutputUnit
  Valore inputValore(TipoValore);
  void outputValore(Valore&);
};
#endif
#include "bus_unit.h"                    //bus_unit.C
#include "memory_unit.h"
#include "input_output_unit.h"
#include <map>
#include<iostream.h>
void BusUnit::putVariabile(string& n, Valore& v)
{MemoriaDati::value_type nv(n,v);
 if((mem->dati).count(n)) mem->dati.erase(n);
 mem->dati.insert(nv);}
Valore BusUnit::getVariabile(string& n)
{if(!(mem->dati).count(n)) return Valore(0);
 else return mem->dati[n];}
TipoValore BusUnit::getTipo(string& n)
{if(mem->dati.count(n)==0)return INDEF;
 Valore v=mem->dati[n]; 
 return v.tipo;
}
void BusUnit::putEtichetta(string& n)
{int l=mem->prog.size();
Etichette::value_type nl(n,l);
mem->etich.insert(nl);}
void BusUnit::putIstruzione(IstrPointer p)
{mem->prog.push_back(p);}
int BusUnit::getStart()
{return 0;}
int BusUnit::getEnd() 
{return mem->prog.size();}
int BusUnit::getEtichetta(string& n){
int indirizzo=mem->etich[n];
return indirizzo;}
IstrPointer BusUnit::getIstruzione(int i) 
{return mem->prog[i];} 
Valore BusUnit::inputValore(TipoValore t)
{Valore v=io->input(t);
 outputValore(v);
return v;}
void BusUnit::outputValore(Valore& v)
{io->output(v);}
#ifndef INPUT_OUTPUT_UNIT        //input_output-unit.h
#define INPUT_OUTPUT_UNIT
#include "valori.h"
class InputOutputUnit {
  Valore input(TipoValore);
  void output(Valore&);
friend class BusUnit;
};
#endif
Come posso fare??????
                     Veronica
-------------------------------------------------------
Messaggio inviato da 
http://www.sandlab.org/newsgroup/
Accesso gratuito via web ai Newsgroup

Devo realizzare il file input_output_unit.C dati i seguenti files:
I sorgenti che hai incluso sono scritti in C++ e non in C.
Forse la cosa ti sorprendera' ma su molti sistemi unix si
usa il suffisso ".C" (maiuscolo!) per i sorgenti C++; quindi
hai come *minimo* sbagliato newsgroup.
A parte questo si tratta pure di codice C++ scritto in modo
*molto* discutibile (l'uso/abuso che viene fatto di map::count
e' a dir poco spaventoso). Ti posso chiedere che razza di
progetto e' e chi ti ha assegnato un compito tanto ingrato ?
Nota che comunque su USENET normalmente non si fanno i
compiti per gli altri (anche perche' non sarebbe affatto
un aiuto, ma una spinta verso un baratro) ma al limite si
chiariscono dubbi *specifici*. Quindi ci provi tu, e se
hai problemi *specifici* li esponi.
Se non sai assolutamente nulla di C++ (come sospetto) ti
consiglio di partire con la lettura di un buon testo: il C++
e' un linguaggio molto complesso e pieno di fastidiose
"asimmetrie" che sono presenti solo per questioni di
evoluzione storica del linguaggio: tentare di apprenderlo
con il ragionamento e' una impresa impensabile (anche se
sei intelligentissima non puoi sperare di dedurre gli
avvenimenti storici... devi leggere per forza).
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

                     Veronica
Sei quella che penso io?
Se lo viene a sapere Colussi...
-- 
Saluti,
    Mardy
http://castellina.org/interlingua