SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
LFC




                                     Nozioni introduttive
                                     Informazioni generali
                                     Parsing, traduzione e
                                     compilazione
                                     Alfabeti, stringhe e
                                     linguaggi



Linguaggi formali e compilazione
    Corso di Laurea in Informatica




           A.A. 2008/2009
LFC
Linguaggi formali e compilazione
                                       Nozioni introduttive
                                       Informazioni generali
                                       Parsing, traduzione e
                                       compilazione
                                       Alfabeti, stringhe e
                                       linguaggi




Nozioni introduttive
  Informazioni generali
  Parsing, traduzione e compilazione
  Alfabeti, stringhe e linguaggi
LFC
Linguaggi formali e compilazione
                                       Nozioni introduttive
                                       Informazioni generali
                                       Parsing, traduzione e
                                       compilazione
                                       Alfabeti, stringhe e
                                       linguaggi




Nozioni introduttive
  Informazioni generali
  Parsing, traduzione e compilazione
  Alfabeti, stringhe e linguaggi
LFC
Informazioni generali sul corso
                                                          Nozioni introduttive
                                                          Informazioni generali
                                                          Parsing, traduzione e
                                                          compilazione
                                                          Alfabeti, stringhe e
                                                          linguaggi

    Sito web:
    http://algo.ing.unimo.it/people/mauro/dida/2008-
    09_LFC/
    Ricevimento (nel semestre di lezione): Mercoledì h
    14.30-16.00, ufficio del docente
    Materiale didattico: si veda il sito web
    Modalità d’esame: scritto (orale solo su richiesta)
    CFU assegnati: 6
LFC
Obiettivi formativi
                                                                Nozioni introduttive
                                                                Informazioni generali
                                                                Parsing, traduzione e
                                                                compilazione
                                                                Alfabeti, stringhe e

    Due obiettivi principali (che si riflettono nel titolo       linguaggi



    stesso dell’insegnamento).
    Acquisizione di nozioni di base sulla teoria dei
    linguaggi formali e degli automi:
         una delle prime teorie “solide” sulle quali si è
         sviluppata l’Informatica come disciplina scientifica;
         fornisce basi per la costruzione di traduttori;
         è utile in svariati altri campi dell’Informatica.
    Sviluppo di conoscenze sui compilatori e della
    capacità di realizzare semplici parser e traduttori.
LFC
Argomenti trattati
                                                      Nozioni introduttive
                                                      Informazioni generali
                                                      Parsing, traduzione e
                                                      compilazione
                                                      Alfabeti, stringhe e
                                                      linguaggi




    Alfabeti, stringhe e linguaggi formali
    Grammatiche e automi
    Analisi lessicale e analisi sintatica (parsing)
    Traduzione e compilazione
LFC
Linguaggi formali e compilazione
                                       Nozioni introduttive
                                       Informazioni generali
                                       Parsing, traduzione e
                                       compilazione
                                       Alfabeti, stringhe e
                                       linguaggi




Nozioni introduttive
  Informazioni generali
  Parsing, traduzione e compilazione
  Alfabeti, stringhe e linguaggi
LFC
Parsing
    Un parser (analizzatore sintattico) è uno strumento           Nozioni introduttive
    che, in termini generali, consente di dare struttura ad       Informazioni generali
                                                                  Parsing, traduzione e
                                                                  compilazione
    una descrizione lineare.                                      Alfabeti, stringhe e
                                                                  linguaggi

    La struttura viene conferita in accordo a regole
    espresse generalmente da una grammatica.
    Alcuni esempi:
          passare dalla descrizione testuale di un grafo ad una
          sua rappresentazione in liste di adiacenze;
          dato un insieme di pagine web, creare un grafo che
          ne descriva la struttura dei collegamenti;
          dato un documento XML, creare una
          rappresentazione dell’informazione in esso
          contenuta (detta information set) da rendere
          disponibile all’applicazione client.
    In tutti i casi, il parsing include un’analisi della
    correttezza formale (well-formedness) delle stringhe
    da analizzare.
LFC
Traduzione
                                                              Nozioni introduttive
                                                              Informazioni generali
   Il parsing opera esclusivamente al livello di sintassi     Parsing, traduzione e
                                                              compilazione
   (cioè della corretta formazione delle frasi).              Alfabeti, stringhe e
                                                              linguaggi

   Un traduttore è un programma che effettua la
   traduzione automatica da un linguaggio ad un altro.
   Nella traduzione (e quindi nella compilazione) è
   importante che venga mantenuto il significato
   (semantica) delle frasi.
   Che cosa sia il “significato” di una frase dipende però
   pesantemente dall’ambito applicativo:
       per un’espressione aritmetica/logica il significato è
       un valore numerico/di verità;
       per un programma il significato è il “comportamento
       indotto” nella macchina (semantica operazionale);
       esempi da altri campi (Musica, Chimica, ...).
LFC
Linguaggi formali
                                                                Nozioni introduttive
                                                                Informazioni generali
                                                                Parsing, traduzione e
    Pur esistendo “tentativi” di applicazione di metodi         compilazione
                                                                Alfabeti, stringhe e
    informatici alla traduzione di scritti in linguaggio        linguaggi


    naturale, il successo della traduzione automatica è
    limitato all’ambito dei linguaggi formali.
    Esempi di linguaggi formali sono
        linguaggi di programmazione, come C, C++ e Java;
        linguaggi di descrizione e/o manipolazione di dati,
        come XML e SQL;
        in ambito non informatico, il linguaggio della Musica
        e quello della Chimica (genericamente intesi).
    È formale un linguaggio che obbedisce a precise
    regole formali (formalismi) di composizione delle
    frasi.
LFC
Compilazione ed interpretazione
                                                           Nozioni introduttive
    Il più importante caso di traduzione in ambito         Informazioni generali
                                                           Parsing, traduzione e

    informatico è la compilazione di linguaggi di alto     compilazione
                                                           Alfabeti, stringhe e

    livello in linguaggi macchina (o comunque linguaggi    linguaggi



    molto più vicini alla macchina).
    Un compilatore per un linguaggio L e una macchina
    M è un traduttore che, data una stringa
    (programma) in linguaggio L, produce un programma
    equivalente nel linguaggio macchina di M.
    Un’alternativa alla compilazione è l’interpretazione
    diretta dei programmi.
    Nel caso dell’interpretazione di L su M, un
    programma in esecuzione su M prende direttamente
    in input frasi in linguaggio L e le “esegue”,
    producendo in output il risultato dell’esecuzione.
LFC
Compilazione ed ed interpretazione
                                                                              Nozioni introduttive
                                                                              Informazioni generali

    Compilazione ed esecuzione                                                Parsing, traduzione e
                                                                              compilazione
                                                                              Alfabeti, stringhe e
                                           Programma P in
                        Compilatore                                           linguaggi
       Programma
                                          codice eseguibile
                         di L per il
    P in linguaggio L
                                           sul computer M
                        computer M




                                               CPU di M           Risultati
                        Input per P




    Interpretazione pura
       Programma
    P in linguaggio L


                         Interprete del
                                                      Risultati
                          linguaggio L


        Input per P
LFC
Soluzioni “miste”
                                                                     Nozioni introduttive
                                                                     Informazioni generali
                                                                     Parsing, traduzione e
                                                                     compilazione
                                                                     Alfabeti, stringhe e
                                                                     linguaggi
    Compilazione ed intepretazione in Java
                                      Programma P in
     Programma        Compilatore    codice intermedio
      P in Java         Java            (bytecode)




                                          JRE per
                                                         Risultati
                                        computer M
                     Input per P



    In tutti i casi (anche nell’interpretazione “pura”), le
    tecniche di compilazione giocano un ruolo
    fondamentale.
LFC
Linguaggi compilati e linguaggi interpretati
                                                              Nozioni introduttive
                                                              Informazioni generali
                                                              Parsing, traduzione e
                                                              compilazione
    In linea di principio, di uno stesso linguaggio L         Alfabeti, stringhe e
                                                              linguaggi
    potrebbero esistere implementazioni compilate ed
    implementazioni interpretate.
    Nella pratica, i linguaggi “si specializzano” in una
    sola delle due alternative, anche (o forse soprattutto)
    perché compilazione ed interpretazione offrono
    vantaggi e svantaggi complementari, che sono poi
    riflessi nei linguaggi stessi.
    C, C++, Fortran e Pascal sono linguaggi compilati.
    I linguaggi dinamici sono linguaggi interpretati.
    Il caso di Java.
LFC
Schema organizzativo di un compilatore
                            Programma sorgente
                                                                                   Nozioni introduttive
                                                                                   Informazioni generali
                                                                                   Parsing, traduzione e
                                                                                   compilazione
                              Analisi lessicale                                    Alfabeti, stringhe e
                                                                                   linguaggi




                         Analisi sintattica (parsing)




 Gestione della
                     Generazione del codice intermedio     Gestione degli errori
 Symbol table




                         Ottimizzazione del codice




                          Generazione del codice




                             Codice oggetto



                  Schema tratto dal quot;Dragon bookquot; (1977)
LFC
Breve descrizione delle fasi
                                                               Nozioni introduttive
Analisi lessicale Un analizzatore lessicale, detto anche       Informazioni generali
                                                               Parsing, traduzione e
              scanner, raggruppa i caratteri della             compilazione
                                                               Alfabeti, stringhe e
              descrizione lineare in token, cioè “oggetti”     linguaggi


              significativi per la successiva analisi
              sintattica. Esempi di token sono i numeri, gli
              identificatori e le parole chiave di un
              linguaggio di programmazione.
Analisi sintattica Un analizzatore sintattico, detto anche
              parser, organizza gruppi di token in strutture
              sintattiche. Un semplice esempio di tale
              organizzazione è il passaggio da una
              sequenza di numeri, operatori aritmetici e
              parentesi (che sono token) ad una
              espressione (che è una struttura sintattica)
              rappresentata come albero.
LFC
Breve descrizione delle fasi
                                                          Nozioni introduttive
                                                          Informazioni generali
                                                          Parsing, traduzione e
Generazione del codice intermedio A partire dalla         compilazione
                                                          Alfabeti, stringhe e

           struttura prodotta dal parser, un generatore   linguaggi



           di codice intermedio produce una sequenza
           di istruzioni in una sorta di linguaggio
           intermedio che, pur molto semplice, non
           coincide con il linguaggio macchina.
Ottimizzazione del codice In questa fase operano
            algoritmi che manipolano il programma
            scritto in codice intermedio in modo da
            ottenere un programma equivalente che (in
            genere) utilizza una minore quantità di
            spazio e/o che “gira” più velocemente .
LFC
Breve descrizione delle fasi
                                                             Nozioni introduttive
                                                             Informazioni generali

Generazione del codice In questa fase il programma in        Parsing, traduzione e
                                                             compilazione

           codice intermedio (eventualmente                  Alfabeti, stringhe e
                                                             linguaggi


           ottimizzato) viene trasformato in codice
           macchina. Qui vengono prese le decisioni
           sull’allocazione dei dati in memoria, il codice
           di accesso e l’utilizzo dei registri.
Gestione della tabella dei simboli È un’attività che
            accompagna tutte le fasi della compilazione.
            La tabella dei simboli è essenzialmente un
            dizionario che registra tutti i nomi usati nel
            programma e le informazioni ad esso
            associate (esempio, un identificatore e il suo
            tipo).
LFC
Breve descrizione delle fasi
                                                            Nozioni introduttive
                                                            Informazioni generali
                                                            Parsing, traduzione e
                                                            compilazione

Gestione degli errori Durante una qualunque delle fasi si   Alfabeti, stringhe e
                                                            linguaggi

            possono verificare degli errori, che devono
            essere individuati e segnalati con opportuni
            messaggi diagnostici. Gli esempi più
            facilmente comprensibili di errore riguardano
            le fasi di analisi lessicale (ad esempio, un
            identificatore che contiene un carattere non
            ammesso) e di analisi sintattica (ad esempio
            un’espressione aritmetica mal formata). In
            generale se vengono rilevati errori non viene
            prodotto il codice oggetto.
LFC
Linguaggi formali e compilazione
                                       Nozioni introduttive
                                       Informazioni generali
                                       Parsing, traduzione e
                                       compilazione
                                       Alfabeti, stringhe e
                                       linguaggi




Nozioni introduttive
  Informazioni generali
  Parsing, traduzione e compilazione
  Alfabeti, stringhe e linguaggi
LFC
Nozione di alfabeto
                                                              Nozioni introduttive
                                                              Informazioni generali
                                                              Parsing, traduzione e
                                                              compilazione
    Un alfabeto è un insieme finito di simboli, detti anche    Alfabeti, stringhe e
                                                              linguaggi

    caratteri.
    I simboli di un alfabeto verranno scriti usando il font
    typewriter.
    Esempi di alfabeti importanti:
        I set di caratteri ASCII e UNICODE;
        B = {0, 1}, l’alfabeto binario;
        D = {A, C, G, T}, l’alfabeto del DNA.
    La lettera greca Σ indicherà un generico alfabeto.
    Le lettere finali dell’alfabeto latino (x, y e z)
    indicheranno simboli generici di un alfabeto.
LFC
Stringhe
                                                          Nozioni introduttive
                                                          Informazioni generali
                                                          Parsing, traduzione e
                                                          compilazione

    Una stringa, su un dato alfabeto Σ, è una sequenza    Alfabeti, stringhe e
                                                          linguaggi

    di simboli (giustapposti) di Σ.
    010110 e 1111 sono esempi di stringhe sull’alfabeto
    binario.
    AACGTCCTA è una stringa sull’alfabeto D.
    Linguaggi formali e compilazione è una
    stringa sull’alfabeto ASCII.
    Conviene considerare anche la stringa vuota, cioè
    una stringa composta da nessun carattere.
    La stringa vuota è definita su qualsiasi alfabeto.
LFC
Stringhe
                                                              Nozioni introduttive
                                                              Informazioni generali
    Per indicare stringhe generiche si utilizzeranno (a       Parsing, traduzione e
                                                              compilazione
    seconda dei casi) sia le ultime lettere dell’alfabeto     Alfabeti, stringhe e
                                                              linguaggi

    latino (X , Y , Z ), in maiuscolo, sia le prime lettere
    dell’alfabeto greco (α, β, γ), in minuscolo.
    La lettera verrà riservata per denotare la stringa
    vuota.
    Una stringa formata da un solo carattere è un
    oggetto diverso dal carattere stesso.
    In tutti i casi nei quali possano sorgere ambiguità, ad
    esempio nel caso di stringhe composte da un solo
    carattere, le stringhe verranno rinchiuse fra doppi
    apici.
    “0” è quindi un oggetto diverso da 0.
LFC
Stringhe
                                                              Nozioni introduttive
    Il numero di caratteri che compongono una stringa X       Informazioni generali
                                                              Parsing, traduzione e
                                                              compilazione
    è detto lunghezza di X .                                  Alfabeti, stringhe e
                                                              linguaggi

    La lunghezza di una stringa X si indica spesso con
    |X | (si noti che consideriamo solo stringhe di
    lunghezza finita).
    Se |X | = n, i singoli caratteri della stringa verranno
    individuati da Xi , i = 1, . . . , n.
    Date due stringhe X e Y , la stringa Z ottenuta
    giustapponendo i caratteri di Y a quelli di X è detta
    concatenazione di X e Y .
    Ad esempio se X = Linguaggi e Y = formali,
    risulta XY = Linguaggiformali.
    Se |X | = n e |Y | = m, risulta |XY | = n + m.
LFC
Stringhe
                                                            Nozioni introduttive
    La concatenzione è associativa, ovvero                  Informazioni generali
                                                            Parsing, traduzione e
                                                            compilazione

                       (XY )Z = X (YZ ).                    Alfabeti, stringhe e
                                                            linguaggi




    La concatenazione non è commutativa: posto
    X = mela e Y = verde, risulta
    XY = melaverde = verdemela = YX .
    La potenza k -esima di una stringa X , indicata con
    X k , è la stringa ottenuta concatenando X con se
                                   k

    stessa k ≥ 0 volte: X k =XX . . . X .
    Si pone poi X 0 = .
    La riflessione di una stringa X = X1 X2 . . . Xn è la
    stringa X R = Xn Xn−1 . . . X0 ottenuta rovesciando i
    caratteri di X .
LFC
Stringhe
                                                              Nozioni introduttive
                                                              Informazioni generali
                                                              Parsing, traduzione e
                                                              compilazione
                                                              Alfabeti, stringhe e

    X è sottostringa di Y se esistono Z e W                   linguaggi



    (eventualmente vuote) tali che: Y = ZXW .
    Se almeno una fra Z e W è diversa dalla stringa
    vuota, allora X è sottostringa propria di Y .
    Se Z è vuota, X è un prefisso di Y .
    Se W è vuota, X è un suffisso di Y .
    La notazione Xi..j verrà utilizzata per indicare la
    sottostringa di X formata dai caratteri dall’i-esimo al
    j-esimo.
LFC
Esempi
                                                                Nozioni introduttive
                                                                Informazioni generali


   Se X = 01, risulta X 3 = 010101, se
                                                                Parsing, traduzione e
                                                                compilazione
                                                                Alfabeti, stringhe e

   X = Linguaggi, allora                                        linguaggi



   X 2 = LinguaggiLinguaggi
   Se X = Linguaggi formali e compilatori,
   allora
         Y = formali è una sottostringa propria di X ,
         Z = Linguaggi è un prefisso di X ,
         W = compilatori è un suffisso di X ,
         X10..17 =“ formali”.
         Si noti, nell’ultimo esempio, l’uso degli apici,
         necessario per evitare le possibili ambiguità dovute
         alla presenza di un spazio ad inizio stringa.
   Se X = Roma, allora X R = amoR.
LFC
Linguaggi
                                                              Nozioni introduttive
   Un linguaggio su un dato alfabeto Σ è un insieme di        Informazioni generali
                                                              Parsing, traduzione e

   stringhe su Σ.                                             compilazione
                                                              Alfabeti, stringhe e
                                                              linguaggi
   Un linguaggio può essere specificato in molti modi
   (ne vedremo almeno 4).
       Per enumerazione: consiste semplicemente
       nell’elencare le stringhe che fanno parte del
       linguaggio.
       Mediante regole della teoria degli insiemi: consiste
       nel descrivere matematicamente come sono fatti gli
       elementi dell’insieme (in questo caso le stringhe).
       Mediante un formalismo generativo.
       Mediante algoritmi di riconoscimento.
   Gran parte di questo corso sarà dedicato alle
   grammatiche e agli automi riconoscitori, che
   rappresentano gli ultimi due modi di specifica.
LFC
Esempi
                                                           Nozioni introduttive
   Dato Σ, l’insieme vuoto Φ e l’insieme di tutte le       Informazioni generali

   possibili stringhe su Σ (denotato da Σ∗ ) sono          Parsing, traduzione e
                                                           compilazione
                                                           Alfabeti, stringhe e
   linguaggi che rivestiranno particolare importanza.      linguaggi



   I seguenti sono esempi di linguaggi definiti su B:
         L1 = {00, 01, 10, 11};
         L2 = { , 0, 1, 00, 01, 10, 11, 000, 001,
                         010, 011, 100, 101, 110, 111};
         L3 = {00, 010, 0110, 01110, . . .};
         L4 = {0, 1, 00, 11, 000, 010, 101, 111, . . .}.
   Gli stessi linguaggi, sopra definiti per enumerazione,
   possono essere specificati in modo più sintetico
   mediante il “linguaggio” della teoria degli insiemi:
                     ∈ B∗
              = {X          : |X | = 2};
         L1
                     ∈ B∗
              = {X          : |X | ≤ 3};
         L2
                     ∈ B∗   : ∃k ≥ 0 t.c. X = 01k 0};
              = {X
         L3
                     ∈ B∗   : X = X R }.
              = {X
         L4
LFC
Esempi
                                                            Nozioni introduttive
                                                            Informazioni generali
                                                            Parsing, traduzione e
                                                            compilazione
   L1 ed L2 sono esempi di linguaggi finiti, mentre L3 ed    Alfabeti, stringhe e
                                                            linguaggi
   L4 sono linguaggi infiniti.
   Naturalmente i linguaggi infiniti rivestono maggior
   interesse sia dal punto di vista teorico sia da quello
   applicativo.
   Vediamo ora alcuni linguaggi sull’alfabeto
   Σ = {a, b, c} che ci saranno utili nel seguito:
                     ∈ Σ∗        = an bm , n, m ≥ 0};
              = {X
         L5                 :X
                     ∈ Σ∗        = an bn , n ≥ 0};
              = {X
         L6                 :X
                     ∈ Σ∗        = bn c n , n ≥ 0};
              = {X
         L7                 :X
                     ∈ Σ∗        = an bn c m , n, m ≥ 0};
              = {X
         L8                 :X
                     ∈ Σ∗        = an bm c m , n, m ≥ 0}.
              = {X
         L9                 :X
LFC
Operazioni con i linguaggi
                                                             Nozioni introduttive
    Innanzitutto, poiché i linguaggi sono insiemi (di        Informazioni generali
                                                             Parsing, traduzione e
    stringhe), sono definite su di essi tutte le operazioni   compilazione
                                                             Alfabeti, stringhe e
    insiemistiche: unione, intersezione, differenza, ecc.    linguaggi



    Si definisce concatenamento (o concatenazione) di
    due linguaggi L ed L , definiti su un alfabeto Σ, il
    linguaggio L = L L le cui stringhe sono il
    concatenamento di una stringa di L e una di L :

        L = {X ∈ Σ∗ : ∃Y ∈ L , ∃Z ∈ L t.c. X = YZ }

    La seguente ricorrenza permette di definire, per ogni
    m ≥ 0, la potenza n-esima di un linguaggio L:

                    L0 = { }
                    Ln = Ln−1 L, n > 0.
LFC
Operazioni con i linguaggi
                                                             Nozioni introduttive
                                                             Informazioni generali
                                                             Parsing, traduzione e

    La chiusura (riflessiva) di L è il linguaggio             compilazione
                                                             Alfabeti, stringhe e
                                                             linguaggi

                      ∞
                ∗
                           Ln = L0 ∪ L1 ∪ L2 ∪ . . .
               L=
                     n=0

    Inciso: è ora chiaro perché l’insieme di tutte le
    possibili stringhe su un alfabeto Σ viene indicato con
    Σ∗ . Per ogni intero i, Σ∗ contiene infatti tutte le
    stringhe di lunghezza i costituite dalla
    concatenazione di caratteri di Σ; tale insieme
    coincide proprio con l’insieme di tutte le possibili
    stringhe su Σ.
LFC
Operazioni con i linguaggi
                                                             Nozioni introduttive
    La chiusura (non riflessiva) di L è definita come          Informazioni generali
                                                             Parsing, traduzione e

    L+ = LL∗ , ovvero:                                       compilazione
                                                             Alfabeti, stringhe e
                                                             linguaggi

                        ∞
                              Ln = L1 ∪ L2 ∪ . . .
                   +
                 L=
                        n=1

    La riflessione di un linguaggio L su un alfabeto Σ è il
    linguaggio:

            LR = {X ∈ Σ∗ : ∃Y ∈ L t.c. X = Y R }.

    Il numero di stringhe di un linguaggio finito verrà
    indicato con la notazione |L|. Se L è infinito risulta
    |L| = N, con ciò intendendo che L ha la stessa
    cardinalità dell’insieme dei numeri naturali.
LFC
Esempi
                                                              Nozioni introduttive
                                                              Informazioni generali
                                                              Parsing, traduzione e
                                                              compilazione
                                                              Alfabeti, stringhe e
                                                              linguaggi

   L5 L6 = {X ∈ Σ∗ : X = an bm , n, m ≥ 0, n = m}
   L5 ∪ L6 = L5
   L5 ∩ L6 = L6
   L6 {c}∗ = L8
   L6 L7 = {X ∈ Σ∗ : X = an bm c k , n, k ≥ 0, m = n + k }
   L{ } = { }L = L
   |L1 | = 4, |L2 | = 15, |L5 | = |L6 | = |L7 | = |L8 | = N
LFC
Esempi
                                                            Nozioni introduttive
                                                            Informazioni generali
                                                            Parsing, traduzione e
                                                            compilazione
                                                            Alfabeti, stringhe e
                                                            linguaggi


   {ab, c}2 = {abab, abc, cab, cc}
   {ab, c}3 = {ababab, abcab, cabab, ccab,
                        ababc, abcc, cabc, ccc}
   {ab, c}∗ = { , ab, c, abab, abc, cab, cc, ababab,
       abcab, cabab, ccab, ababc, abcc, cabc, ccc, . . .}
   {ab, c}+ = {ab, c}∗ { }
               R
    {ab, c}2       = {baba, cba, bac, cc}

Contenu connexe

Tendances

CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다
HyeonSeok Choi
 

Tendances (9)

Lecture 1 introduction to language processors
Lecture 1  introduction to language processorsLecture 1  introduction to language processors
Lecture 1 introduction to language processors
 
from Source to Binary: How GNU Toolchain Works
from Source to Binary: How GNU Toolchain Worksfrom Source to Binary: How GNU Toolchain Works
from Source to Binary: How GNU Toolchain Works
 
COMPILER DESIGN- Introduction & Lexical Analysis:
COMPILER DESIGN- Introduction & Lexical Analysis: COMPILER DESIGN- Introduction & Lexical Analysis:
COMPILER DESIGN- Introduction & Lexical Analysis:
 
Semantic analysis
Semantic analysisSemantic analysis
Semantic analysis
 
Slaytt
SlayttSlaytt
Slaytt
 
Parkinson rehabilitasyonu
Parkinson rehabilitasyonuParkinson rehabilitasyonu
Parkinson rehabilitasyonu
 
Andes building a secure platform with the enhanced iopmp
Andes building a secure platform with the enhanced iopmpAndes building a secure platform with the enhanced iopmp
Andes building a secure platform with the enhanced iopmp
 
系統程式 -- 第 6 章 巨集處理器
系統程式 -- 第 6 章 巨集處理器系統程式 -- 第 6 章 巨集處理器
系統程式 -- 第 6 章 巨集處理器
 
CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다
 

En vedette

5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria
Majong DevJfu
 
Traffic Shaping Su Linux
Traffic Shaping Su LinuxTraffic Shaping Su Linux
Traffic Shaping Su Linux
Majong DevJfu
 
4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color
Majong DevJfu
 
esercizio sigda n 11
esercizio sigda n 11esercizio sigda n 11
esercizio sigda n 11
Majong DevJfu
 
Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03
Majong DevJfu
 
Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04
Majong DevJfu
 
Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86
Majong DevJfu
 
Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05
Majong DevJfu
 
Sistemi Operativi: Processi - Lezione 07
Sistemi Operativi: Processi - Lezione 07Sistemi Operativi: Processi - Lezione 07
Sistemi Operativi: Processi - Lezione 07
Majong DevJfu
 
Calcolo Numerico - 2 - Numeri Di Macchina
Calcolo Numerico - 2 - Numeri Di MacchinaCalcolo Numerico - 2 - Numeri Di Macchina
Calcolo Numerico - 2 - Numeri Di Macchina
Majong DevJfu
 
Sistemi Operativi: Introduzione - Lezione 01
Sistemi Operativi: Introduzione - Lezione 01Sistemi Operativi: Introduzione - Lezione 01
Sistemi Operativi: Introduzione - Lezione 01
Majong DevJfu
 

En vedette (20)

Linguaggi di programmazione
Linguaggi di programmazioneLinguaggi di programmazione
Linguaggi di programmazione
 
Linguaggi di programmazione
Linguaggi di programmazioneLinguaggi di programmazione
Linguaggi di programmazione
 
5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria
 
Traffic Shaping Su Linux
Traffic Shaping Su LinuxTraffic Shaping Su Linux
Traffic Shaping Su Linux
 
4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color
 
esercizio sigda n 11
esercizio sigda n 11esercizio sigda n 11
esercizio sigda n 11
 
Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03
 
Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04
 
2 sistemi informativi d azienda
2 sistemi informativi d azienda2 sistemi informativi d azienda
2 sistemi informativi d azienda
 
Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86
 
8 Www2009 Parte1
8 Www2009 Parte18 Www2009 Parte1
8 Www2009 Parte1
 
3 H2 N Parte3
3 H2 N Parte33 H2 N Parte3
3 H2 N Parte3
 
E6 Concorre
E6 ConcorreE6 Concorre
E6 Concorre
 
9 Ftp Telnet Email
9 Ftp Telnet Email9 Ftp Telnet Email
9 Ftp Telnet Email
 
6 Dns Parte2
6 Dns Parte26 Dns Parte2
6 Dns Parte2
 
Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05
 
esercizio sigda n 8
esercizio sigda n 8esercizio sigda n 8
esercizio sigda n 8
 
Sistemi Operativi: Processi - Lezione 07
Sistemi Operativi: Processi - Lezione 07Sistemi Operativi: Processi - Lezione 07
Sistemi Operativi: Processi - Lezione 07
 
Calcolo Numerico - 2 - Numeri Di Macchina
Calcolo Numerico - 2 - Numeri Di MacchinaCalcolo Numerico - 2 - Numeri Di Macchina
Calcolo Numerico - 2 - Numeri Di Macchina
 
Sistemi Operativi: Introduzione - Lezione 01
Sistemi Operativi: Introduzione - Lezione 01Sistemi Operativi: Introduzione - Lezione 01
Sistemi Operativi: Introduzione - Lezione 01
 

Plus de Majong DevJfu

9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
Majong DevJfu
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
Majong DevJfu
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
Majong DevJfu
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
Majong DevJfu
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
Majong DevJfu
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
Majong DevJfu
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
Majong DevJfu
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
Majong DevJfu
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
Majong DevJfu
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
Majong DevJfu
 

Plus de Majong DevJfu (20)

9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
 
Uml3
Uml3Uml3
Uml3
 
Uml2
Uml2Uml2
Uml2
 
6
66
6
 
5
55
5
 
4 (uml basic)
4 (uml basic)4 (uml basic)
4 (uml basic)
 
3
33
3
 
2
22
2
 
1
11
1
 
Tmd template-sand
Tmd template-sandTmd template-sand
Tmd template-sand
 
26 standards
26 standards26 standards
26 standards
 

Introduzione a Linguaggi formali e compilazione

  • 1. LFC Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e linguaggi Linguaggi formali e compilazione Corso di Laurea in Informatica A.A. 2008/2009
  • 2. LFC Linguaggi formali e compilazione Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e linguaggi Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e linguaggi
  • 3. LFC Linguaggi formali e compilazione Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e linguaggi Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e linguaggi
  • 4. LFC Informazioni generali sul corso Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e linguaggi Sito web: http://algo.ing.unimo.it/people/mauro/dida/2008- 09_LFC/ Ricevimento (nel semestre di lezione): Mercoledì h 14.30-16.00, ufficio del docente Materiale didattico: si veda il sito web Modalità d’esame: scritto (orale solo su richiesta) CFU assegnati: 6
  • 5. LFC Obiettivi formativi Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e Due obiettivi principali (che si riflettono nel titolo linguaggi stesso dell’insegnamento). Acquisizione di nozioni di base sulla teoria dei linguaggi formali e degli automi: una delle prime teorie “solide” sulle quali si è sviluppata l’Informatica come disciplina scientifica; fornisce basi per la costruzione di traduttori; è utile in svariati altri campi dell’Informatica. Sviluppo di conoscenze sui compilatori e della capacità di realizzare semplici parser e traduttori.
  • 6. LFC Argomenti trattati Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e linguaggi Alfabeti, stringhe e linguaggi formali Grammatiche e automi Analisi lessicale e analisi sintatica (parsing) Traduzione e compilazione
  • 7. LFC Linguaggi formali e compilazione Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e linguaggi Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e linguaggi
  • 8. LFC Parsing Un parser (analizzatore sintattico) è uno strumento Nozioni introduttive che, in termini generali, consente di dare struttura ad Informazioni generali Parsing, traduzione e compilazione una descrizione lineare. Alfabeti, stringhe e linguaggi La struttura viene conferita in accordo a regole espresse generalmente da una grammatica. Alcuni esempi: passare dalla descrizione testuale di un grafo ad una sua rappresentazione in liste di adiacenze; dato un insieme di pagine web, creare un grafo che ne descriva la struttura dei collegamenti; dato un documento XML, creare una rappresentazione dell’informazione in esso contenuta (detta information set) da rendere disponibile all’applicazione client. In tutti i casi, il parsing include un’analisi della correttezza formale (well-formedness) delle stringhe da analizzare.
  • 9. LFC Traduzione Nozioni introduttive Informazioni generali Il parsing opera esclusivamente al livello di sintassi Parsing, traduzione e compilazione (cioè della corretta formazione delle frasi). Alfabeti, stringhe e linguaggi Un traduttore è un programma che effettua la traduzione automatica da un linguaggio ad un altro. Nella traduzione (e quindi nella compilazione) è importante che venga mantenuto il significato (semantica) delle frasi. Che cosa sia il “significato” di una frase dipende però pesantemente dall’ambito applicativo: per un’espressione aritmetica/logica il significato è un valore numerico/di verità; per un programma il significato è il “comportamento indotto” nella macchina (semantica operazionale); esempi da altri campi (Musica, Chimica, ...).
  • 10. LFC Linguaggi formali Nozioni introduttive Informazioni generali Parsing, traduzione e Pur esistendo “tentativi” di applicazione di metodi compilazione Alfabeti, stringhe e informatici alla traduzione di scritti in linguaggio linguaggi naturale, il successo della traduzione automatica è limitato all’ambito dei linguaggi formali. Esempi di linguaggi formali sono linguaggi di programmazione, come C, C++ e Java; linguaggi di descrizione e/o manipolazione di dati, come XML e SQL; in ambito non informatico, il linguaggio della Musica e quello della Chimica (genericamente intesi). È formale un linguaggio che obbedisce a precise regole formali (formalismi) di composizione delle frasi.
  • 11. LFC Compilazione ed interpretazione Nozioni introduttive Il più importante caso di traduzione in ambito Informazioni generali Parsing, traduzione e informatico è la compilazione di linguaggi di alto compilazione Alfabeti, stringhe e livello in linguaggi macchina (o comunque linguaggi linguaggi molto più vicini alla macchina). Un compilatore per un linguaggio L e una macchina M è un traduttore che, data una stringa (programma) in linguaggio L, produce un programma equivalente nel linguaggio macchina di M. Un’alternativa alla compilazione è l’interpretazione diretta dei programmi. Nel caso dell’interpretazione di L su M, un programma in esecuzione su M prende direttamente in input frasi in linguaggio L e le “esegue”, producendo in output il risultato dell’esecuzione.
  • 12. LFC Compilazione ed ed interpretazione Nozioni introduttive Informazioni generali Compilazione ed esecuzione Parsing, traduzione e compilazione Alfabeti, stringhe e Programma P in Compilatore linguaggi Programma codice eseguibile di L per il P in linguaggio L sul computer M computer M CPU di M Risultati Input per P Interpretazione pura Programma P in linguaggio L Interprete del Risultati linguaggio L Input per P
  • 13. LFC Soluzioni “miste” Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e linguaggi Compilazione ed intepretazione in Java Programma P in Programma Compilatore codice intermedio P in Java Java (bytecode) JRE per Risultati computer M Input per P In tutti i casi (anche nell’interpretazione “pura”), le tecniche di compilazione giocano un ruolo fondamentale.
  • 14. LFC Linguaggi compilati e linguaggi interpretati Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione In linea di principio, di uno stesso linguaggio L Alfabeti, stringhe e linguaggi potrebbero esistere implementazioni compilate ed implementazioni interpretate. Nella pratica, i linguaggi “si specializzano” in una sola delle due alternative, anche (o forse soprattutto) perché compilazione ed interpretazione offrono vantaggi e svantaggi complementari, che sono poi riflessi nei linguaggi stessi. C, C++, Fortran e Pascal sono linguaggi compilati. I linguaggi dinamici sono linguaggi interpretati. Il caso di Java.
  • 15. LFC Schema organizzativo di un compilatore Programma sorgente Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Analisi lessicale Alfabeti, stringhe e linguaggi Analisi sintattica (parsing) Gestione della Generazione del codice intermedio Gestione degli errori Symbol table Ottimizzazione del codice Generazione del codice Codice oggetto Schema tratto dal quot;Dragon bookquot; (1977)
  • 16. LFC Breve descrizione delle fasi Nozioni introduttive Analisi lessicale Un analizzatore lessicale, detto anche Informazioni generali Parsing, traduzione e scanner, raggruppa i caratteri della compilazione Alfabeti, stringhe e descrizione lineare in token, cioè “oggetti” linguaggi significativi per la successiva analisi sintattica. Esempi di token sono i numeri, gli identificatori e le parole chiave di un linguaggio di programmazione. Analisi sintattica Un analizzatore sintattico, detto anche parser, organizza gruppi di token in strutture sintattiche. Un semplice esempio di tale organizzazione è il passaggio da una sequenza di numeri, operatori aritmetici e parentesi (che sono token) ad una espressione (che è una struttura sintattica) rappresentata come albero.
  • 17. LFC Breve descrizione delle fasi Nozioni introduttive Informazioni generali Parsing, traduzione e Generazione del codice intermedio A partire dalla compilazione Alfabeti, stringhe e struttura prodotta dal parser, un generatore linguaggi di codice intermedio produce una sequenza di istruzioni in una sorta di linguaggio intermedio che, pur molto semplice, non coincide con il linguaggio macchina. Ottimizzazione del codice In questa fase operano algoritmi che manipolano il programma scritto in codice intermedio in modo da ottenere un programma equivalente che (in genere) utilizza una minore quantità di spazio e/o che “gira” più velocemente .
  • 18. LFC Breve descrizione delle fasi Nozioni introduttive Informazioni generali Generazione del codice In questa fase il programma in Parsing, traduzione e compilazione codice intermedio (eventualmente Alfabeti, stringhe e linguaggi ottimizzato) viene trasformato in codice macchina. Qui vengono prese le decisioni sull’allocazione dei dati in memoria, il codice di accesso e l’utilizzo dei registri. Gestione della tabella dei simboli È un’attività che accompagna tutte le fasi della compilazione. La tabella dei simboli è essenzialmente un dizionario che registra tutti i nomi usati nel programma e le informazioni ad esso associate (esempio, un identificatore e il suo tipo).
  • 19. LFC Breve descrizione delle fasi Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Gestione degli errori Durante una qualunque delle fasi si Alfabeti, stringhe e linguaggi possono verificare degli errori, che devono essere individuati e segnalati con opportuni messaggi diagnostici. Gli esempi più facilmente comprensibili di errore riguardano le fasi di analisi lessicale (ad esempio, un identificatore che contiene un carattere non ammesso) e di analisi sintattica (ad esempio un’espressione aritmetica mal formata). In generale se vengono rilevati errori non viene prodotto il codice oggetto.
  • 20. LFC Linguaggi formali e compilazione Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e linguaggi Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e linguaggi
  • 21. LFC Nozione di alfabeto Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Un alfabeto è un insieme finito di simboli, detti anche Alfabeti, stringhe e linguaggi caratteri. I simboli di un alfabeto verranno scriti usando il font typewriter. Esempi di alfabeti importanti: I set di caratteri ASCII e UNICODE; B = {0, 1}, l’alfabeto binario; D = {A, C, G, T}, l’alfabeto del DNA. La lettera greca Σ indicherà un generico alfabeto. Le lettere finali dell’alfabeto latino (x, y e z) indicheranno simboli generici di un alfabeto.
  • 22. LFC Stringhe Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Una stringa, su un dato alfabeto Σ, è una sequenza Alfabeti, stringhe e linguaggi di simboli (giustapposti) di Σ. 010110 e 1111 sono esempi di stringhe sull’alfabeto binario. AACGTCCTA è una stringa sull’alfabeto D. Linguaggi formali e compilazione è una stringa sull’alfabeto ASCII. Conviene considerare anche la stringa vuota, cioè una stringa composta da nessun carattere. La stringa vuota è definita su qualsiasi alfabeto.
  • 23. LFC Stringhe Nozioni introduttive Informazioni generali Per indicare stringhe generiche si utilizzeranno (a Parsing, traduzione e compilazione seconda dei casi) sia le ultime lettere dell’alfabeto Alfabeti, stringhe e linguaggi latino (X , Y , Z ), in maiuscolo, sia le prime lettere dell’alfabeto greco (α, β, γ), in minuscolo. La lettera verrà riservata per denotare la stringa vuota. Una stringa formata da un solo carattere è un oggetto diverso dal carattere stesso. In tutti i casi nei quali possano sorgere ambiguità, ad esempio nel caso di stringhe composte da un solo carattere, le stringhe verranno rinchiuse fra doppi apici. “0” è quindi un oggetto diverso da 0.
  • 24. LFC Stringhe Nozioni introduttive Il numero di caratteri che compongono una stringa X Informazioni generali Parsing, traduzione e compilazione è detto lunghezza di X . Alfabeti, stringhe e linguaggi La lunghezza di una stringa X si indica spesso con |X | (si noti che consideriamo solo stringhe di lunghezza finita). Se |X | = n, i singoli caratteri della stringa verranno individuati da Xi , i = 1, . . . , n. Date due stringhe X e Y , la stringa Z ottenuta giustapponendo i caratteri di Y a quelli di X è detta concatenazione di X e Y . Ad esempio se X = Linguaggi e Y = formali, risulta XY = Linguaggiformali. Se |X | = n e |Y | = m, risulta |XY | = n + m.
  • 25. LFC Stringhe Nozioni introduttive La concatenzione è associativa, ovvero Informazioni generali Parsing, traduzione e compilazione (XY )Z = X (YZ ). Alfabeti, stringhe e linguaggi La concatenazione non è commutativa: posto X = mela e Y = verde, risulta XY = melaverde = verdemela = YX . La potenza k -esima di una stringa X , indicata con X k , è la stringa ottenuta concatenando X con se k stessa k ≥ 0 volte: X k =XX . . . X . Si pone poi X 0 = . La riflessione di una stringa X = X1 X2 . . . Xn è la stringa X R = Xn Xn−1 . . . X0 ottenuta rovesciando i caratteri di X .
  • 26. LFC Stringhe Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e X è sottostringa di Y se esistono Z e W linguaggi (eventualmente vuote) tali che: Y = ZXW . Se almeno una fra Z e W è diversa dalla stringa vuota, allora X è sottostringa propria di Y . Se Z è vuota, X è un prefisso di Y . Se W è vuota, X è un suffisso di Y . La notazione Xi..j verrà utilizzata per indicare la sottostringa di X formata dai caratteri dall’i-esimo al j-esimo.
  • 27. LFC Esempi Nozioni introduttive Informazioni generali Se X = 01, risulta X 3 = 010101, se Parsing, traduzione e compilazione Alfabeti, stringhe e X = Linguaggi, allora linguaggi X 2 = LinguaggiLinguaggi Se X = Linguaggi formali e compilatori, allora Y = formali è una sottostringa propria di X , Z = Linguaggi è un prefisso di X , W = compilatori è un suffisso di X , X10..17 =“ formali”. Si noti, nell’ultimo esempio, l’uso degli apici, necessario per evitare le possibili ambiguità dovute alla presenza di un spazio ad inizio stringa. Se X = Roma, allora X R = amoR.
  • 28. LFC Linguaggi Nozioni introduttive Un linguaggio su un dato alfabeto Σ è un insieme di Informazioni generali Parsing, traduzione e stringhe su Σ. compilazione Alfabeti, stringhe e linguaggi Un linguaggio può essere specificato in molti modi (ne vedremo almeno 4). Per enumerazione: consiste semplicemente nell’elencare le stringhe che fanno parte del linguaggio. Mediante regole della teoria degli insiemi: consiste nel descrivere matematicamente come sono fatti gli elementi dell’insieme (in questo caso le stringhe). Mediante un formalismo generativo. Mediante algoritmi di riconoscimento. Gran parte di questo corso sarà dedicato alle grammatiche e agli automi riconoscitori, che rappresentano gli ultimi due modi di specifica.
  • 29. LFC Esempi Nozioni introduttive Dato Σ, l’insieme vuoto Φ e l’insieme di tutte le Informazioni generali possibili stringhe su Σ (denotato da Σ∗ ) sono Parsing, traduzione e compilazione Alfabeti, stringhe e linguaggi che rivestiranno particolare importanza. linguaggi I seguenti sono esempi di linguaggi definiti su B: L1 = {00, 01, 10, 11}; L2 = { , 0, 1, 00, 01, 10, 11, 000, 001, 010, 011, 100, 101, 110, 111}; L3 = {00, 010, 0110, 01110, . . .}; L4 = {0, 1, 00, 11, 000, 010, 101, 111, . . .}. Gli stessi linguaggi, sopra definiti per enumerazione, possono essere specificati in modo più sintetico mediante il “linguaggio” della teoria degli insiemi: ∈ B∗ = {X : |X | = 2}; L1 ∈ B∗ = {X : |X | ≤ 3}; L2 ∈ B∗ : ∃k ≥ 0 t.c. X = 01k 0}; = {X L3 ∈ B∗ : X = X R }. = {X L4
  • 30. LFC Esempi Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione L1 ed L2 sono esempi di linguaggi finiti, mentre L3 ed Alfabeti, stringhe e linguaggi L4 sono linguaggi infiniti. Naturalmente i linguaggi infiniti rivestono maggior interesse sia dal punto di vista teorico sia da quello applicativo. Vediamo ora alcuni linguaggi sull’alfabeto Σ = {a, b, c} che ci saranno utili nel seguito: ∈ Σ∗ = an bm , n, m ≥ 0}; = {X L5 :X ∈ Σ∗ = an bn , n ≥ 0}; = {X L6 :X ∈ Σ∗ = bn c n , n ≥ 0}; = {X L7 :X ∈ Σ∗ = an bn c m , n, m ≥ 0}; = {X L8 :X ∈ Σ∗ = an bm c m , n, m ≥ 0}. = {X L9 :X
  • 31. LFC Operazioni con i linguaggi Nozioni introduttive Innanzitutto, poiché i linguaggi sono insiemi (di Informazioni generali Parsing, traduzione e stringhe), sono definite su di essi tutte le operazioni compilazione Alfabeti, stringhe e insiemistiche: unione, intersezione, differenza, ecc. linguaggi Si definisce concatenamento (o concatenazione) di due linguaggi L ed L , definiti su un alfabeto Σ, il linguaggio L = L L le cui stringhe sono il concatenamento di una stringa di L e una di L : L = {X ∈ Σ∗ : ∃Y ∈ L , ∃Z ∈ L t.c. X = YZ } La seguente ricorrenza permette di definire, per ogni m ≥ 0, la potenza n-esima di un linguaggio L: L0 = { } Ln = Ln−1 L, n > 0.
  • 32. LFC Operazioni con i linguaggi Nozioni introduttive Informazioni generali Parsing, traduzione e La chiusura (riflessiva) di L è il linguaggio compilazione Alfabeti, stringhe e linguaggi ∞ ∗ Ln = L0 ∪ L1 ∪ L2 ∪ . . . L= n=0 Inciso: è ora chiaro perché l’insieme di tutte le possibili stringhe su un alfabeto Σ viene indicato con Σ∗ . Per ogni intero i, Σ∗ contiene infatti tutte le stringhe di lunghezza i costituite dalla concatenazione di caratteri di Σ; tale insieme coincide proprio con l’insieme di tutte le possibili stringhe su Σ.
  • 33. LFC Operazioni con i linguaggi Nozioni introduttive La chiusura (non riflessiva) di L è definita come Informazioni generali Parsing, traduzione e L+ = LL∗ , ovvero: compilazione Alfabeti, stringhe e linguaggi ∞ Ln = L1 ∪ L2 ∪ . . . + L= n=1 La riflessione di un linguaggio L su un alfabeto Σ è il linguaggio: LR = {X ∈ Σ∗ : ∃Y ∈ L t.c. X = Y R }. Il numero di stringhe di un linguaggio finito verrà indicato con la notazione |L|. Se L è infinito risulta |L| = N, con ciò intendendo che L ha la stessa cardinalità dell’insieme dei numeri naturali.
  • 34. LFC Esempi Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e linguaggi L5 L6 = {X ∈ Σ∗ : X = an bm , n, m ≥ 0, n = m} L5 ∪ L6 = L5 L5 ∩ L6 = L6 L6 {c}∗ = L8 L6 L7 = {X ∈ Σ∗ : X = an bm c k , n, k ≥ 0, m = n + k } L{ } = { }L = L |L1 | = 4, |L2 | = 15, |L5 | = |L6 | = |L7 | = |L8 | = N
  • 35. LFC Esempi Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e linguaggi {ab, c}2 = {abab, abc, cab, cc} {ab, c}3 = {ababab, abcab, cabab, ccab, ababc, abcc, cabc, ccc} {ab, c}∗ = { , ab, c, abab, abc, cab, cc, ababab, abcab, cabab, ccab, ababc, abcc, cabc, ccc, . . .} {ab, c}+ = {ab, c}∗ { } R {ab, c}2 = {baba, cba, bac, cc}