-
Notifications
You must be signed in to change notification settings - Fork 0
/
declarations.h
186 lines (142 loc) · 4.21 KB
/
declarations.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
extern int yylineno; /* from lexer */
//void yyerror(char *s, ...);
extern int yyparse();
extern FILE *yyin;
extern int yylex();
union YYSTYPE yylval;
typedef char* String;
typedef char* evento;
//lettura di stringhe
struct symbol {
/* a variable name */
char *name;
double value;
struct ast *func;
/* stmt for the function */
struct symlist *syms; /* list of dummy args */
};
/* simple symtab of fixed size */
#define NHASH 9997
struct symbol symtab[NHASH];
/* list of symbols, for an argument list */
struct symlist {
struct symbol *sym;
struct symlist *next;
};
static unsigned symhash(char *sym);
String lookup(char* sym);
//lettura di stringhe
union YYSTYPE{
int fn;
String c;
struct assegnazioni* as;
struct operazioni* op;
struct cond* con;
struct elenco_cond* elen_con;
struct stato* stat;
struct elenco_stati* elen_stat;
struct cambio_stato* camb_stat;
struct action* azione;
struct event* even;
struct elenchi* elen;
struct cicli* cic;
};
typedef struct assegnazioni{
int type;
String nome;
void* value;
struct assegnazioni* next;
}assegnazioni;
typedef struct operazioni{
struct assegnazioni* primo;
struct assegnazioni* secondo;
struct assegnazioni* terzo;
int operatore;
int value;
}operazioni;
typedef struct cond{
struct assegnazioni* primo;
struct assegnazioni* secondo;
int paragone;
struct cambio_stato* s;
struct action* az;
}cond;
typedef struct elenco_cond{
struct cond* value;
struct elenco_cond* next;
}elenco_cond;
typedef struct stato{
String nome;
struct action* azioni;
struct event* eventi;
struct elenco_cond* el_cond;
struct elenco_stati* el_stati;
struct cicli* cic;
}stato;
typedef struct elenco_stati{
struct stato* value;
struct elenco_stati* next;
}elenco_stati;
typedef struct cambio_stato{
struct event* causa;
struct elenco_stati* effetto;
}cambio_stato;
typedef struct action{
operazioni* op;
struct action* next;
}action;
typedef struct event{
evento value;
struct event* next;
}event;
typedef struct elenchi{
struct action* oper;
struct cambio_stato* cambio;
}elenchi;
typedef struct cicli{
int tipo;
assegnazioni* as;
elenco_cond* condi;
elenchi* el;
action* az;
cond* con;
}cicli;
//creare funzioni per i cicli
cicli* new_cicli(int t, assegnazioni* asse, elenco_cond* con, action* a, cond* co);
cicli* new_cicli1(int t, assegnazioni* asse, elenchi* el, action* a, cond* co);
int free_cicli(cicli* c);
//creare il new stato per il ciclo
stato* new_stato5( String n,action* actions, elenco_cond* el_con,elenchi* cs,cicli* c);
int run(assegnazioni* ass,event* evv,event* azz,elenco_stati* el);
elenchi* new_elenchi( action* opera, cambio_stato* cambios);
elenchi* add_cambio_elenchi( elenchi* el, cambio_stato* cambio);
elenchi* add_oper_elenchi(elenchi* el, action* az);
int free_elenchi(elenchi* op);
operazioni* new_operazione( assegnazioni* pr, assegnazioni* sec, assegnazioni* ter, int operatore, int v);
int free_operazioni(operazioni* op);
assegnazioni* new_assegnazioni( String n, void* v, int tipo);
assegnazioni* add_assegnazioni(assegnazioni* as, assegnazioni* as2);
int free_assegnazioni(assegnazioni* as);
stato* new_stato1(String n);
stato* new_stato2( String n,action* actions, elenchi* cs);
stato* new_stato3( String n,action* actions, event *ev, elenco_stati* prox);
stato* new_stato4( String n,action* actions, elenco_cond* con, elenchi* cs);
action* new_action(operazioni* a, action* prox);
event* new_evento(evento e, event* prox);
elenco_stati* new_el_stati(stato* statolista, stato* prox);
elenco_stati* new_el_stati1(stato* statolista);
cambio_stato* new_cambiostato(event* e, elenco_stati* es);
cambio_stato* add_cambiostato(cambio_stato* cs, cambio_stato* cs2);
int free_cambiostato(cambio_stato* cs);
elenco_cond* new_elencocond(cond* condi);
elenco_cond* add_elencocond(elenco_cond* prim, elenco_cond* sec);
int free_elencocond(elenco_cond* elen);
cond* new_cond(assegnazioni* pr, assegnazioni* sec, int par, elenchi* stat);
int free_cond(cond* condi);
action* add_azione(action* a, action* prox);
event* add_evento(event* e, event* prox);
elenco_stati* add_el_stati(elenco_stati* statolista, stato* prox);
int free_stato(stato* s);
int free_action(action* a);
int free_evento(event* e);
int free_el_stati(elenco_stati* statolista);