#Vedi PDF Complementi
Si propone di aggiungere if-statement, while-statement e for-statement. Sono statement.
ifstmt: "if" condexp statement optelse
optelse: "else" statement | %empty
forstmt: "for" "(" initfor ";" condexp ";" assignment ")" stmt
initfor:
%empty
| binding
| assignment
È necessario introdurre una nuova categoria sintattica per l'inizializzazione.
Manca ancora una struttura dati per il nostro linguaggio.
Priorità:
- relazionale
- logici
condexp:
relexp
| relexp "and" condexp
| relexp "or" condexp
| "not" condexp
| "(" condexp ")"
Non implementiamo VLA né tantomeno array dinamici. Il numero di elementi è conosciuto a tempo di compilazione.
Per l'allocazione vedi CreateEntryBlockAlloca
passando come Type *T
il valore ottenuto da ArrayType::get(Type::getDoubleType(*context), eleNum)
. Ritorna un AllocaInst*
.
Per l'accesso all'elemento si può usare il metodo CreateInBoundsGEP
, passando:
- tipo
- array
- un riferimento a un Value int32 che è il valore dell'indice
#Nota che le espressioni attuali ritornano un puntatore a un Double #Prova a convertire double in int32, senza passare da float