Пример #1
0
static double Surface(CAS* cas,double *xatom)
{
    double f;
    CASResetAtoms(cas);
    CASSetCenterAtom(cas,xatom[0],xatom[1],xatom[2],xatom[3]);
    Liste(cas, xatom);
    f= CASSurface(cas);
    return f;
}  /* Surface */
Пример #2
0
void Syntaxe::lignescode() {
  Liste *l;
  Symbole s;
  int i;
  unsigned int t;

  while (lex.GetId() == FIN_LIGNE) {
    lex.Read();
  }

  switch (lex.GetId()) {
  case ID :
    // initialisation de la valeur de l'ID
    s = lex.GetSymb();
    if (s.GetInit()) {
      // Erreur : symbole déjà rencontré
      std::wcerr << L"Erreur ligne " << lex.GetLine() << L" colonne " << lex.GetColumn() << L"\u00a0: " << L"le label " << s.GetText() << " est déjà déclaré." << std::endl;
      err = true;
    } else s.SetValue(cCode);
    lex.Read();
    if (lex.GetId() != DEUX_POINTS) {
      // ERREUR : il faut :
      std::wcerr << L"Erreur ligne " << lex.GetLine() << L" colonne " << lex.GetColumn() << L"\u00a0: " << L"':' attendu." << std::endl;
      err = true;
    } else lex.Read();
    lignescode();
    break;
  
  case INSTR :

    // MAJ de la pile d'instructions.
    *lCurrent = Liste(lex.GetIdbis(), lex.GetLine());
    lex.Read();
    // lecture des opérandes et de finligne
    for (i = 0; i < 3; i++) {
      if ((lex.GetId() == VIRGULE) && (i == 0)) {
	// ERREUR
      std::wcerr << L"Erreur ligne " << lex.GetLine() << L" colonne " << lex.GetColumn() << L"\u00a0: " << L"',' en trop." << std::endl;
      err = true;
      lex.Read();
      }
      if (lex.GetId() == VIRGULE) lex.Read();
      t = lex.GetId();
      if (t == REGISTRE) {
	lCurrent->SetReg(i, lex.GetIdbis());
	lex.Read();
      } else if (t == PGAUCHE || t == ID || t == NOMBRE || t == MOINS || t == NON) {
	lCurrent->SetImm(i, nivn(7));
      } else if (t == FIN_LIGNE) break;
    }
    l = new Liste(0,0);
    lCurrent->SetSuiv(l);
    lCurrent = l;
    cCode++;
    if (lex.GetId() != FIN_LIGNE) {
      // ERREUR
      std::wcerr << L"Erreur ligne " << lex.GetLine() << L" colonne " << lex.GetColumn() << L"\u00a0: " << L"une instruction doit être suivi d'un saut de ligne." << std::endl;
      err = true;
      while(lex.GetId() != FIN_LIGNE) lex.Read(); 
    }
    lex.Read();
    lignescode();
    break;

  default:
    // cas epsilon
    break;
  }
}