class lex {
     private:
         int      tok;   // ultimo objeto leído
         double   dbl;   // ultimo numero real leido
         istream& is;    // archivo de entrada
     public:
         lex(istream& s) { is= s; };
         char lexico();
         void termino(double coef, int expo);
};


lex::lex(istream& s)
{
    is= s;
    tok= lexico();
}

char lex::lexico()
{
    while (!is.get().eof() && isspace(is.peek()))
        is.get();

    if (is.eof())
       return '#';

    int c= is.get();
    switch (c)  {
        case '0': case '1': case '2': case '3': case '4':
        case '5': case '6': case '7': case '8': case '9':
              is.putback(c);
              is >> dbl;
              return 'n';

        case '+':
        case '-':
        case ';':
              return c;

        default :
              cerr << "Error:  caracter desconocido: " << char(c) << endl;
              return '#';
       }
}

void termino(double& coef, in& expo)
{
    if (tok == 'n')
      {
       coef= dbl;
       tok= lexico();
       if (tok=='x')
          {
           tok= lexico();
           if (tok=='n')
               expo= (int) dbl;
           else
               expo= 1;
          }
       else
           expo= 0;
       return;
      }
    else
      if (tok=='x')
         {
          coef= 1.0;
          tok= lexico();
          if (tok=='n')
             expo= (int) dbl;
          else
             expo= 1;
         }
      else
         {
          cerr << "Error al leer un término " << tok << endl;
          coef= 0;
          expo= 0;
         }
}

istream& Poli::Read(istream& is)
{

}



