Skip to content

Latest commit

 

History

History
48 lines (37 loc) · 1.22 KB

12. Complementi.md

File metadata and controls

48 lines (37 loc) · 1.22 KB

#Vedi PDF Complementi

Estensioni al linguaggio

Si propone di aggiungere if-statement, while-statement e for-statement. Sono statement.

If e for 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.

Array

Manca ancora una struttura dati per il nostro linguaggio.

Operatori logici

Priorità:

  • relazionale
  • logici
condexp:
	relexp
	| relexp "and" condexp
	| relexp "or" condexp
	| "not" condexp
	| "(" condexp ")"

Array

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