1 / 25

Linguaggi di Programmazione - elementi

Corso di Laurea in Informatica (AA 2004/2005). Linguaggi di Programmazione - elementi. Gabriella Pasi e Carla Simone gabriella.pasi@itc.cnr.it simone@disco.unimib.it. ESERCIZIO. Esempio : V = {a,b,c,d} N = {A,S} Start Symbol S. P = {S  cAd, A  bAb|a }.

curry
Télécharger la présentation

Linguaggi di Programmazione - elementi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Corso di Laurea in Informatica (AA 2004/2005) Linguaggi di Programmazione - elementi Gabriella Pasi e Carla Simone gabriella.pasi@itc.cnr.it simone@disco.unimib.it

  2. ESERCIZIO Esempio: V = {a,b,c,d} N = {A,S} Start Symbol S P = {S cAd, A  bAb|a} Grammatica di tipo context free Derivazione per cbabb? Non esiste! Derivazione per cbbbabbbd? S cAd cbAbd  cbbAbbd  cbbbAbbbd  cbbbabbbd Linguaggio generato da G: L(G) = {cbnabnd|n0}

  3. ESERCIZIO Dato il linguaggio L = {anbcdn | n 0} costruire una grammatica che lo genera. V = {a,b,c,d} N = {A,S} Start symbol S P = {S A, A  aAd|bc} E’ possibile utilizzare una grammatica regolare? Se si, dare la sua definizione. NO

  4. ESERCIZIO Dato il linguaggio L = {anbcdm | n 0, m 0} costruire una grammatica che lo genera. V = {a,b,c,d} N = {A,S} P = {S A; A  aAd|bc|aA|Ad} P = {S  A A aA|bc|Ad} E’ possibile utilizzare una grammatica regolare? Se si, dare la sua definizione. SI S  aS|bC C  cD|c D  dD|d

  5. L = {anbcdm | n 0, m 0} P = {S bC | aA A  aA | bC C  cD |c D  dD | d Regolare? SI

  6. ESERCIZIO Data la grammatica V = {x} N = {S,X,B} P = S  xX X  x X  xB B  xX A) di che tipo e’ la grammatica? regolare, lineare a destra B) mostrare una derivazione per xxxxx e una per xxxx S xX xxB  xxxX  xxxx Non esiste derivazione per xxxxx C) qual’e’ il linguaggio generato? L(G) = {x2n |n>=1} D) Esiste una grammatica context free che lo genera? Se si, dare la sua definizione. S  X X  xXx|xx

  7. ESERCIZIO Dato il linguaggio L = {abncdn | n 0} costruire una grammatica che lo genera. V = {a,b,c,d} N = {A,S} P = {S aA, A  bAd|c} E’ possibile utilizzare una grammatica regolare? Se si, dare la sua definizione. NO

  8. ESERCIZIO Esempio: V = {a,b} N = {A,S} S assioma P = {S a|aA, A  a|b|aA|bA} A) Di che tipo e’ la grammatica? regolare, lineare a destra B) Derivazione per baab? Questa stringa non e’ generabile C) Derivazione per abba? S aA abA  abbA  abba Linguaggio generato da G: il linguaggio delle stringhe non vuote su {a,b} che iniziano per a

  9. ESERCIZIO V = {a,b,c} N = {S,X} S assioma P = {S X|e, X  aXa|bXb|c} context free A) Di che tipo e’ la grammatica? B) Derivazione per abcba? S X aXa  abXba  abcba Linguaggio generato da G: il linguaggio delle stringhe palindrome su {a,b,c} con una e una sola c al centro, piu’ la stringa vuota.

  10. ESERCIZIO Dato il linguaggio L = {anb2n | n > 0} costruire una grammatica che lo genera. V = {a,b} N = {S,X} Start Symbol S P = {S X, X  aXbb|abb}

  11. ESERCIZIO V = {a,b,c} N = {S,A} S assioma P = { S aSc|A A  bAc|e} Linguaggio generato da G? L(G) = {anbmcn+m |n,m0} Regole di produzione senza ricorsione su S: P = {S A A  aAc|B B  bBc|e} N = {S,A,B}

  12. ESERCIZIO Il linguaggio L(G) = {anb|n 0} puo’ essere generato da una grammatica regolare? V = {a,b} N = {S,A} S assioma P = {S Ab|b A  Aa|a} Usare una context-free non da’ vantaggi

  13. ESERCIZIO Definire una grammatica che generi il linguaggio L(G) = {anbn |n 0} V = {a,b} N = {S,A} S assioma P = {S A A  aAb|ab|e}

  14. ANALISI SINTATTICA Data una grammatica G si pone il problema di verificare se una data stringa appartiene al linguaggio L(G): • analisi lessicale: controlla che i simboli utilizzati appartengano all'alfabeto • analisi grammaticale: verifica il rispetto delle regole grammaticali

  15. Linguaggi di programmazione • Linguaggio macchina: binario, implica la conoscenza della macchina e dei metodi di rappresentazione delle informazioni. • Linguaggio assembler: linguaggio macchina in cui nomi e simboli prendono il posto dei codici numerici associati a istruzioni, e riferimenti alle celle di memoria (indirizzi) maggiore leggibilità. • Linguaggi di “alto livello”: • astrazione dall’architettura sottostante • portabilità dei programmi; • maggiore semplicità di uso • esistono librerie di programmi già pronti; • per essere eseguiti devono essere tradotti in linguaggio macchina.

  16. Linguaggi di programmazione Affinchè un programma scritto in un qualsiasi linguaggio di programmazione sia comprensibile (e quindi eseguibile) da un elaboratore occorre tradurlo dal linguaggio originario al linguaggio macchina. Questa operazione viene normalmente svolta da programmi speciali, detti traduttori.

  17. Traduttori Il traduttore converte il testo di un programma scritto in un particolare linguaggio di programmazione (sorgente) nella corrispondente rappresentazione in linguaggio macchina (eseguibile). Due categorie di traduttori: • i Compilatoritraducono l’intero programma (senza eseguirlo!) e producono in uscita il programma convertito in linguaggio macchina • gli Interpretitraducono ed eseguono immediatamente ogni singola istruzione del programma sorgente.

  18. Traduttori Quindi: • nel caso del compilatore, lo schema viene percorso una volta solaprima dell’esecuzione • nel caso dell’interprete, lo schema viene invece attraversato tante volte quante sono le istruzioniche compongono il programma.

  19. Analisi lessicale L’analizzatore lessicale o scanner, verifica la correttezza delle parole utilizzate ed estrae i cosiddetti token (parole chiave, identificatori, costanti, operatori, ecc.) ==> Grammatiche regolari (LEX) Lo scanner trasforma un testo in una sequenza di token. Ad esempio l’istruzione x:=100 viene trasformata nella sequenza: identificatore, operatore di assegnamento, costante.

  20. Analisi sintattica L’analizzatore sintattico o parser, verifica la correttezza delle espressioni (frasi) nel programma sulla base della corretta applicazione delle regole sintattiche (regole di produzione, definite in BNF o mediante grafi sintattici). ==> Grammatiche context-free (YACC) Analisi semantica L’analizzatore semantico ha lo scopo di stabilire se un’espressione ha significato. Non è possibile verificare ciò per qualsiasi espressione: quello che i compilatori sono in grado di fare è stabilire la violazione di alcune regole semantiche. Ad esempio operazioni tra operandi di tipi non compatibili, applicazione di funzioni con un numero di parametri diverso da quelli dichiarati (ordine e tipo), uso di oggetti non dichiarati, operatori illegali per il tipo di oggetti a cui sono applicati.

  21. AMBIENTI DI PROGRAMMAZIONE: caso 1 (compilatori) Editor: serve per creare file che contengono testi (cioè sequenze di caratteri). In particolare, l’editor consente di scrivere il programma sorgente. Compilatore: opera la traduzione di un programma sorgente (scritto in un linguaggio ad alto livello) in un programma oggetto. Linker: (collegatore) nel caso in cui la costruzione del programma eseguibile richieda l’unione di più moduli (compilati separatamente), il linker provvede a collegarli formando un unico programma eseguibile. Debugger: consente di eseguire passo-passo un programma, al fine di scoprire ed eliminare errori non rilevati in fase di compilazione.

  22. Il processo di Traduzione compilatore linker loader

More Related