OpenCores
URL https://opencores.org/ocsvn/minimips/minimips/trunk

Subversion Repositories minimips

[/] [minimips/] [trunk/] [gasm/] [include/] [analyseur.h] - Blame information for rev 15

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 13 louismarie
/*********************************************************************************************/
2
/* MODULE ANALYSEUR                                                                          */
3
/* Ce module a pour but de parcourir le fichier assembleur en effectuant la correspondance   */
4
/* du code source avec la syntaxe acceptée par le langage. La lecture se fait lexème par     */
5
/* lexème en utilisant le préprocesseur.                                                     */
6
/* Il se charge de générer la pile de précode qu sera utilisée par le syntéthiseur pour      */
7
/* générer le code final.                                                                    */
8
/*********************************************************************************************/
9
#ifndef M_ANALYSEUR_FLAG
10
#define M_ANALYSEUR_FLAG
11
 
12
#include <parametres.h>
13
#include <adaptateur.h>
14
#include <preparateur.h>
15
 
16
typedef struct file_pcd_tmp
17
{
18
        type_mask * mask;               /* Masque déjà généré à la première passe.           */
19
        char nbr_func;                  /* Nombre de fonctions restant à appliquer.          */
20
        type_ptr_fgm * func;            /* Tableau des pointeurs vers ces fonctions.         */
21
        type_file_lexeme * param;       /* File de lexèmes ayant validé l'intruction.        */
22
        char * fichier_orig;            /* Nom du fichier d'origine de l'instruction.        */
23
        int ligne_orig;                 /* Numéro de la ligne de l'instruction.              */
24
        struct file_pcd_tmp * suivant;  /* Pointeur vers la suite de la file de precode.     */
25
        int erreur;                     /* Code d'erreur rencontré.                          */
26
        int pco;                        /* Adresse d'implantation.                           */
27
} type_precode;
28
 
29
 
30
extern type_precode * file_precode;     /* Pointeur vers la file de précode générée.         */
31
 
32
int analyse();                          /* Point d'entrée principal du module.               */
33
void clear_analyseur();                 /* Fonction de nettoyage/réinitialisation du module. */
34
 
35
/* Macro d'allocation et d'initialisation d'un précode.                                      */
36
#define ALLOC_PREC(prec)        \
37
{\
38
        prec = (type_precode *) malloc(sizeof(type_precode));\
39
        if (prec==NULL) DIALOGUE(msg_orig, 0, F_ERR_MEM);\
40
        prec->fichier_orig=NULL;\
41
        prec->ligne_orig=0;\
42
        prec->mask=NULL;\
43
        prec->nbr_func=0;\
44
        prec->func=NULL;\
45
        prec->param=NULL;\
46
        prec->suivant=NULL;\
47
        prec->erreur=NO_ERR;\
48
}
49
 
50
/* Cette macro libère l'espace alloué pour une file de lexèmes.                              */
51
#define FREE_ARGS(args) \
52
{\
53
        type_file_lexeme * courant=args, * suivant;\
54
        while (courant!=NULL)\
55
        {\
56
                suivant=courant->suivant;\
57
                FREE_LEX(courant->lexeme);\
58
                free(courant);\
59
                courant=suivant;\
60
        }\
61
        args=NULL;\
62
}
63
 
64
/* Cette macro libère l'espace alloué pour un précode.                                       */
65
#define FREE_PRECODE(precode)   \
66
{\
67
        if (precode->mask) FREE_MASK(precode->mask);\
68
        if (precode->nbr_func!=0 && precode->func!=NULL) free(precode->func);\
69
        FREE_ARGS(precode->param);\
70
        if (precode->fichier_orig) free(precode->fichier_orig);\
71
        if (precode->func) free(precode->func);\
72
        free(precode);\
73
}
74
 
75
/* Cette macro efface et libère le contenu d'un précode mais pas la structure elle_même.     */
76
/* On conserve toutefois les informations sur l'origine.                                     */
77
#define CLEAR_PRECODE(precode)  \
78
{\
79
        if (precode->mask) FREE_MASK(precode->mask);\
80
        precode->mask=NULL;\
81
        if (precode->nbr_func!=0 && precode->func!=NULL) free(precode->func);\
82
        precode->func=NULL;\
83
        FREE_ARGS(precode->param);\
84
        precode->param=NULL;\
85
        precode->nbr_func=0;\
86
}
87
 
88
 
89
/* Cette macro peut être utilisée pour écrire un masque sous forme "lisible".                */
90
#define FPRINT_BIN(f, ptrmask)  \
91
{\
92
        int i;\
93
        if (ptrmask)\
94
        {\
95
                for (i=8*ptrmask->taille-1;i>=0;i--)\
96
                        fprintf(f, "%c",((ptrmask->valeur>>i) % 2) ? '1' : '0');\
97
        }\
98
}
99
 
100
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.