Title: Linguaggi di Programmazione Primo Semestre / 01 - Introduzione

Q: ## Macchina Astratta
A: **Definizione(Macchina Astratta)**: Supponiamo che sia dato un linguaggio di
programmazione $\mathcal{L}$. Definiamo una macchina astratta per $\mathcal{L}$, e la indichiamo con $M_\mathcal{L}$, un qualsiasi insieme di strutture dati e di algoritmi che pennettano di memoriz;zare ed eseguire programmi scritti in $\mathcal{L}$

Q: ## Compiti dell'interprete
A: è colui che dovrà compiere operazioni specifiche che dipendono dal linguaggio $\mathcal{L}$ che dev'essere interpretato.
Ci sono operazioni comunui a tutte le macchine astratte:
1. operazioni per l'elaborazione dei dati primitivi
2. operazioni e struture dati per il controllo della sequenza di esecuzione delle operazioni
3. operazioni e strutture dati per il controllo del trasferimento dati
4. operazioni e strutture dai per la gestione della memoria

Q: ## Realizzazione di una macchina Astratta
A: Possiamo realizzare una Ma
1. **realizzazione HardWare**
  - usata solo per macchine di basso livello o macchine dedicate
  - massima velocità
  - flessibilità nulla
2. **emulazione o simulazione via firmware**: strutture dati e algoritmi MA realizzati mediante microprogrammi, che risiedono in una memoria di sola lettura
  -  macchina ospite (fisica) microprogrammabile
  - alta velocità
  - flessibilità maggiore che HW puro
3. **interpretazione o simulazione Software**:strutture dati e algoritmi della macchina astratta MA realizzati mediante programmi scritti nel linguaggio della macchina ospite MO
  - macchina ospite qualsiasi
  - minore velocità
  - massima flessibilità.

## Definizione di interprete

## Def: compilatore

Q: ## Differenze tra compilazione e interpretazione, e caso reale
A: Nella Maggior parte di casi reali il compilatore e l'interprete coesistono