home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / languages / cleo.lzh / Cleo / source / function.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-24  |  3.0 KB  |  106 lines

  1. /***************************************************************************
  2. *   Ce fichier, ainsi que tous les  modules  l'accompagnant, peut et  doit *
  3. * etre  copié GRATUITEMENT à la seule condition expresse de conserver      *
  4. * l'INTEGRALITE  du  Code Source, de  la documentation, et  des fichiers   *
  5. * annexes du package. Ce logiciel est Shareware, veuilez envoyer 100 FF à  *
  6. * l'auteur pour recevoir regulièrement les nouvelles versions.             *
  7. * Toute modification est INTERDITE sans l'autorisation écrite de l'auteur. *
  8. *            Tous droits réservés à M. DIALLO Barrou, Juillet 1992.        *
  9. ***************************************************************************/
  10.  
  11. /* #define debug */
  12.         /********  Analyseur Syntaxique  Fonctions & Procedures ******/
  13.  
  14. #ifdef msdos
  15.         #include "include\\cleobis.h"
  16. #else
  17.         #include "include/cleobis.h"
  18. #endif
  19.  
  20. extern BOOL dismode;
  21. extern int pcpc;
  22. extern int curlg;
  23. extern int curcol;
  24. extern char curtoken[];
  25. extern CONST *symb;
  26. extern CONST *cursymb;
  27. extern VAR *var;
  28. extern VAR *curvar;
  29. extern int NbVar;
  30. extern MY_TYPESID curtokentype;
  31. extern MY_TYPESID lasttokentype;
  32. extern MY_TYPESID facttype;
  33. extern MY_CONST curconst;
  34. extern Entete head;
  35. extern int curtokenid;
  36. extern int lasttokenid;
  37. extern PROG *prg;
  38. extern int *Adress;
  39. extern PROG *curprg;
  40. extern int Nbfct;
  41. extern int curfct;
  42. extern FIELDSTRUCT Field[];
  43.  
  44. void Fonction(void)
  45. {
  46.     Lexical();
  47.     if (curtokentype != ident_mt)
  48.         TraitErreur( TEXTERROR, NOIDENT, curlg, curcol);
  49.  
  50. }
  51.  
  52. void Procedure(void)
  53. {
  54.     int nbvars=0, n=0;
  55.  
  56.     Lexical();
  57.     if (curtokentype != ident_mt)
  58.         TraitErreur( TEXTERROR, NOIDENT, curlg, curcol);
  59.     Lexical();
  60.  
  61.     Nbfct++; curfct =Nbfct;
  62.  
  63.     if (*curtoken != '(' && *curtoken != ';')
  64.         TraitErreur( TEXTERROR, BADPROC, curlg, curcol);
  65.     else if ( *curtoken == ';')                     /* pas de parametres */
  66.         {
  67.             Lexical();
  68.             BlocFct();
  69.         }
  70.     else              /* Il y a des parametres */
  71.     {
  72.             Lexical();
  73.       while (curtokentype == ident_mt)
  74.        {
  75.         n=0;
  76.         while (curtokentype == ident_mt)
  77.         {
  78.             InsVar(); n++; nbvars++;
  79.             if ( *curtoken == ',')
  80.                 {
  81.                     Lexical();
  82.                     if (curtokentype != ident_mt)
  83.                         TraitErreur( TEXTERROR, NOIDENT, curlg, curcol);
  84.                 }
  85.          }
  86.          if ( *curtoken != ':')
  87.                 TraitErreur( TEXTERROR, NOPP, curlg, curcol);
  88.          Lexical();
  89.          if (curtokentype != reservedtype_mt)
  90.             TraitErreur( TEXTERROR, NOTYPE, curlg, curcol);
  91.          AssignType(n, curtokenid);    /* rajoute les variables a la liste */
  92.          Lexical();
  93.          if ( *curtoken != ';' && *curtoken != ')')
  94.             TraitErreur( TEXTERROR, NOPF, curlg, curcol);
  95.          if ( *curtoken == ';') Lexical();
  96.        }
  97.        if ( *curtoken != ')')
  98.            TraitErreur( TEXTERROR, NOPF, curlg, curcol);
  99.        Lexical();
  100.        BlocFct();
  101.       }
  102.  Lexical();
  103.  
  104.  curfct--;               /** On change de fonction */
  105. }
  106.