Linguaggi di programmazione

In questa pagina potrete trovare contenuti relativi al corso di Linguaggi di programmazione. La pagina è in corso di aggiornamento perciò alcune risposte/nozioni potrebbero essere imprecise.



Domande Gorrieri Orale

Domande assolutamente da sapere

  1. Che cos'è un interprete?
  2. Che cos'è un compilatore?
  3. Quando un interprete si può dire corretto? Quando un compilatore si può dire corretto?
  4. Definizione di grammatica libera da contesto
  5. Elencare le varie fasi in cui si articola un compilatore. Descrivere in dettaglio ogni singola fase.
  6. Cosa fa l'analizzatore lessicale?
  7. Definizione di espressioni regolari (sintassi) e di linguaggio associato (semantica).
  8. Definizione di NFA (automa finito nondeterministico).
  9. Definizione di DFA (automa finito deterministico).
  10. Come si costruisce un NFA a partire da una espressione regolare.
  11. Definizione di grammatica regolare.
  12. Cos'è Lex? Qual è il suo input e il suo output?
  13. Intestazione e dimostrazione del pumping lemma.
  14. Come si può utilizzare il pumping lemma (a rovescio) per dimostrare che un linguaggio non è regolare?
  15. Cos'è un parser?
  16. Definizione di automa a pila nondeterministico (PDA).
  17. Intestazione del “Pumping Theorem".
  18. Come si può utilizzare tale teorema (a rovescio) per dimostrare che un linguaggio non è libero?
  19. Definizione di DPDA (automa a pila deterministico) e di linguaggio libero deterministico.
  20. Da cosa si parte per costruire un analizzatore sintattico (ovvero parser)? Da una espressione regolare? Da una grammatica libera? Da un PDA?
  21. Cosa prende in input e cosa produce in output un parser?
  22. Le tecniche top-down e bottom-up in che cosa differiscono?
  23. Definizione di First(α) e di Follow(A).
  24. Quando una grammatica G si dice di classe LL(1)? Quali sono le condizioni necessarie e sufficienti per G affinché sia di classe LL(1)?
  25. Cos'è un parser bottom-up (o shift-reduce)? Qual è il suo input e il suo output? Perché sono chiamati parser LR?
  26. Cos'è un item LR(0)?
  27. Cos'è YACC? Qual è il suo input e il suo output?
  28. Quando un linguaggio è detto Turing-completo?

Capitolo 1 - Macchine astratte, interpreti, compilatori
  1. Cos'è una macchina astratta e come si differenzia da una macchina fisica?
  2. Cos'è un interprete? In cosa consiste il ciclo fetch-decode-execute? In cosa consiste il ciclo fetch-decode-execute?
  3. Cos'è il linguaggio macchina?
  4. Possono esistere macchine diverse con lo stesso linguaggio macchina?
  5. In quali modi è possibile implementare una macchina astratta? Elencare vantaggi e svantaggi delle varie tecniche.
  6. In quali modi è possibile implementare una macchina astratta? Elencare vantaggi e svantaggi delle varie tecniche.
  7. Relativamente alla tecnica d'implementazione software, descrivere la tecnica d'implementazione interpretativa pura e quella compilativa pura.
  8. Quando un interprete si può dire corretto? Quando un compilatore si può dire corretto?
  9. Confrontare l'implementazione di una macchina astratta su una macchina ospite per mezzo di un interprete o di un compilatore.
  10. Come vengono implementate nella realtà le macchine astratte? Che cos'è la macchina intermedia?
  11. Quando si dice che una implementazione è di tipo interpretativo e quando di tipo compilativo? Fare esempi di linguaggi la cui implementazione è di un tipo o dell'altro.
  12. Cos'è la Just-in-Time compilation?
  13. L'interprete e il compilatore si possono sempre realizzare?
  14. Che cosa è l'implementazione via kernel?
  15. Quando si parla di bootstrapping?