Sintassi dei linguaggi di programmazione
|
|
- Sibilla Negro
- 5 anni fa
- Visualizzazioni
Transcript
1 Sintassi dei linguaggi di programmazione Grammatiche e automi Grammatiche e automi Sintassi dei linguaggi di programmazione 1 / 1
2 Descrizione di un linguaggio di programmazione sintassi: quali sequenze di caratteri costituiscono programmi, la loro struttura semantica: significato, come si comporta un programma, l effetto della sua esecuzione pragmatica: utilizzo pratico; come scrivere buon codice; convenzioni, stili nello scrivere i programmi. implementazione: come eseguire il codice Grammatiche e automi Sintassi dei linguaggi di programmazione 2 / 1
3 Descrizione della sintassi linguaggio di programmazione Quali sequenze di carattere formano un programma Qual è la struttura sintattica di un programma Descrizione, completamente formale, ottenuta tramite grammatiche Ripasso di Fondamenti di informatica Grammatiche e automi Sintassi dei linguaggi di programmazione 3 / 1
4 Grammatiche Formalismo nato per descrivere linguaggi, anche naturali Chonsky, anni 50 Si definisce: un alfabeto A, linguaggio formato da sequenze di elementi (lettere) dell alfabeto. i simboli alfabeto sono chiamati anche terminali un insieme di categorie sintattiche: proposizione, soggetto, predicate, complementi-di-termine, nome, articolo,... comando, dichiarazione-di-termine, identificatore, costante-numerico, dichiarazioni costituiscono i simboli non-terminali Grammatiche e automi Sintassi dei linguaggi di programmazione 4 / 1
5 Grammatiche un insieme di regoli generazione, spiegano come espandere i non-terminali, quali classe di parale, un non-terminale rappresenta, proposizione -> soggetto predicato_verbale proposizione -> soggetto predicato_verbale complemento_oggetto programma -> dichiarazioni programma_principale Grammatiche e automi Sintassi dei linguaggi di programmazione 5 / 1
6 Formalmente Un linguaggio su alfabeto A, è un sottoinsieme di A, (stringhe su A) Definizione: Grammatica libera (dal contesto) Caratterizzata da: T insieme di simboli terminali (alfabeto del linguaggio) NT insieme di simboli non terminali (categorie sintattiche) R insieme di regole di produzione S simbolo iniziale NT Regole R (libere da contesto) nella forma: V w con V NT e w (T NT ) Grammatiche e automi Sintassi dei linguaggi di programmazione 6 / 1
7 Esempio Espressioni aritmetiche su variabili a, b, c terminali: a, b, c, +, -, *, (, ) non-terminali: E, T, F (espressione, termine, fattore) regole: E -> T, E -> E + T, E -> E - T T -> F, T -> T * F F -> (E), F -> Var Var -> a, Var -> b, Var -> c simbolo iniziale: E Grammatiche e automi Sintassi dei linguaggi di programmazione 7 / 1
8 Formulazione alternativa: BNF (Backus Naur Form) Sviluppata per l Algol60 non terminali marcati da parentesi: E (non devo definirli esplicitamente) -> sostituita da ::= regole con stesso simbolo a sinistra raggruppate E ::= T E + T E - T Esistono notazioni intermedie: E -> T E + T E - T Grammatiche e automi Sintassi dei linguaggi di programmazione 8 / 1
9 Derivazioni e alberi di derivazione Derivazione: come passare da simbolo iniziale a parola finale, una regola alla volta, Albero di derivazione: rappresentazione univoca della derivazione, mette in evidenza la struttura del termine. definizione di albero data per scontata: più formalizzazioni dello stesso concetto intuitivo es: sottoinsieme di stringhe chiuso per prefisso (foresta non ordinato) Grammatiche e automi Sintassi dei linguaggi di programmazione 9 / 1
10 Grammatiche ambigue: Espressioni aritmetiche definibili da: E -> E + E E - E E * E ( E ) Var Le due grammatiche generano lo stesso linguaggio ma non sono equivalenti. a + b * c possiede due derivazioni nella seconda grammatica le due derivazioni inducono due meccanismi di valutazione differente due interpretazioni diverse della stessa stringa Queste ambiguità vanno evitate (come in matematica) Grammatiche e automi Sintassi dei linguaggi di programmazione 10 / 1
11 Disambiguare uno grammatica Due soluzioni: introdurre nuovi non-terminali e renderla più complessa non esistono ricette semplici convivere con grammatiche ambigue e specificare l ordine di precedenza degli operatori soluzione usata anche nei parser Esempio: stat ::= IF bool THEN stat ELSE stat IF bool THEN stat... ambigua su IF bool1 THEN IF bool2 THEN stat1 ELSE stat2 Esercizio: scrivere la versione non ambigua. Grammatiche e automi Sintassi dei linguaggi di programmazione 11 / 1
12 Sintassi astratta (Abstract syntax tree) il significato di una stringa di caratteri è meglio rappresentata dal suo albero di derivazione che dall espressione stessa a volte necessario complicare l espressione per darle la giusta interpretazione (a + b) * c parentesi ( ) necessaria per definire la precedenza questi orpelli sono eliminabile nella rappresentazione ad albero Abstract syntax tree: albero sintattico minimale minima di una stringa Sintassi astratta: sintassi minimale senza complicazione per evitare ambiguità E -> E + E E - E E * E Var Grammatiche e automi Sintassi dei linguaggi di programmazione 12 / 1
13 Classi di grammatiche Oltre alle grammatiche libere dal contesto esistono anche: Grammatiche a struttura di frase dipendenti da contesto libere da contesto lineari sinistre, lineari destre regolari differenze: diverse grado di libertà nel definire le regole con grammatiche più generali: una classe più ampia di linguaggi definibili più complesso decidere se un parola appartiene al linguaggio, costruire albero di derivazione Grammatiche e automi Sintassi dei linguaggi di programmazione 13 / 1
14 Scelta Libero da contesto compromesso ottimale tra espressività e complessità. spesso tempo lineare ampio insieme di linguaggi definibili Grammatiche e automi Sintassi dei linguaggi di programmazione 14 / 1
15 Vincoli sintattici contestuali: Tuttavia con grammatiche libere dal contesto non posso eliminare dall insieme di programmi riconosciuti (accettati) programmi che non rispettano alcuni vincoli sintattici (contestuali) come: identificatori dichiarati prima dell uso ugual numero di parametri attuali e formali non modificare variabile di controllo ciclo for rispettare i tipi nelle assegnazioni il linguaggio a n b a n b a n non è libero da contesto Grammatiche e automi Sintassi dei linguaggi di programmazione 15 / 1
16 Soluzione (dei compilatori): usare comunque grammatiche libere (efficienti), costruito l albero sintattico, effettuare una fase di l analisi semantica Fase di analisi semantica chiamata anche semantica statica controlli eseguibili a tempo di compilazione alternativi alla semantica dinamica controlli eseguiti durante l esecuzione. Grammatiche e automi Sintassi dei linguaggi di programmazione 16 / 1
17 Semantica termine abusato nelle locuzioni semantica statica, semantica dinamica semantica di un programma rappresenta il suo significato, descrive il suo comportamento a run-time non un semplice controllo degli errori. Semantica definita quasi sempre informalmente in linguaggi naturale esistono alternative formali semantico operazionale strutturata: programma descritto da un sistema di regole (di riscrittura) che descrivono il risultato della valutazione di un qualsiasi programma semantica denozianale: descrivo con delle strutture matematiche (funzioni) il comportamento del programma. Grammatiche e automi Sintassi dei linguaggi di programmazione 17 / 1
18 Front end del compilatore Sintassi della lingua naturale: descrivo l insieme di parale valide, divise in categorie (articoli, nomi, verbi,... ) regole per costruire frasi da parole descrizione linguaggio formale, compilatore descrizioni delle parti elementare lessema, meccanismi per riconoscerlo, analisi lessicale descrizione della struttura generale, a partire da lessemi, analisi sintattica Divisione rende più efficiente l analisi del testo Grammatiche e automi Sintassi dei linguaggi di programmazione 18 / 1
19 Analisi lessicale (scanner) Nella stringa di caratteri riconosco i lessemi, e per ogni lessema costituisco un token token : ( categoria sintattica, valore -attributo ) Esempio, data la stringa x = a + b * 2; viene generata la sequenza di token [(identifier, x), (operator, =), (identifier, a), (operator, + (identifier, b), (operator, *), (literal, 2), (separator, ;)] La sequenza di token generati viene passata all analizzatore sintattico (parser) Come esprimere i lessemi: espressioni regolari Grammatiche e automi Sintassi dei linguaggi di programmazione 19 / 1
20 Operazioni su linguaggi Sui linguaggi su uno stesso alfabeto A, sugli insiemi di stringhe di A posso definire le operazioni di: unione: L M concatenazione L M = { s t s L, t M } dove s t indica la concatenazione della stringa s con la stringa t chiusura di Kleene L* = { s1 s2 s2... sn per ogni i si L} e considerare tutti gli insiemi di stringhe ottenibili da singoletti, usando le operazioni di sopra. Grammatiche e automi Sintassi dei linguaggi di programmazione 20 / 1
21 Espressioni regolari, algebra di Kleene Espressioni (algebriche), L, M, N,... che denotano un linguaggio, insieme di costanti: simboli terminali costante ε, stringa vuota attraverso le operazioni di: concatenazione: LM unione: L M chiusura di Kleene: L* Grammatiche e automi Sintassi dei linguaggi di programmazione 21 / 1
22 Esempi a b* = {ε, a, b, bb, bbb,... } (a b)* = {ε, a, b, aa, ab, ba, bb, aaa,... } ab*(c ε) = { a, ac, ab, abc, abb, abbc,... } (0 (1(01*0)*1))* = { ε, 0, 00, 11, 000, 011, 110, 0000, 0011, 0110, 1001, 1100, 1111, 00000,... }, numeri in base 2 multipli di 3. Grammatiche e automi Sintassi dei linguaggi di programmazione 22 / 1
23 Da espressioni regolari a linguaggi Ogni espressioni regolare rappresenta un linguaggio: L( ε ) = { ε } L(a) = { a } L (L M) = L(L) L (M) L (L M) = L(L) L (M) L (L*) = (L(L))* Grammatiche e automi Sintassi dei linguaggi di programmazione 23 / 1
24 Estensioni Oltre a operazioni base posso definire altre operazioni chiusura positiva: L + = L L* zero o un istanza: L? = ε L L{n}: n concatenazioni di parole in L = L L... L uno tra: [acdz] = a c d z range: [a-z,a-z] = a b c... A B C... Espressioni più compatte, ma stessa classe di linguaggi. Esistono molte altre estensioni Espressioni regolari usate nei programmi per manipolare stringhe, text-editor, incluse nel librerie standard di molti linguaggi di programmazione Grammatiche e automi Sintassi dei linguaggi di programmazione 24 / 1
25 Definizione tramite equazioni Permette una scrittura chiara più compatta: digit -> [0-9] simple -> digit + fract -> simple. simple exp -> fract e ( ɛ + n ) simple num -> simple fract exp Grammatiche e automi Sintassi dei linguaggi di programmazione 25 / 1
26 Risultati teorici Teorema Linguaggi regolari posso essere descritti in molti diversi: espressioni regolari grammatiche regolari automi finiti non deterministici, NFA non determistic finite automata. automi finiti deterministici (macchine a stati finiti) DFA determistic finite automata. Teorema Esiste l automa deterministico minimo (minor numero di stati) Grammatiche e automi Sintassi dei linguaggi di programmazione 26 / 1
27 Esempio Riconoscitore per b(an)*e Grammatiche e automi Sintassi dei linguaggi di programmazione 27 / 1
28 Applicazioni Dall espressione regolare costruisco l automa minimo, in modo effettivo. Dall automa minimo costruisco un programma (ottimale) per decidere se una parola appartiene a un espressione regolare. Programma contiene un tabella che descrive le transazione del automa minimo, e ne simula il comportamento. Grammatiche e automi Sintassi dei linguaggi di programmazione 28 / 1
29 Scanner Lo scanner deve risolvere un problema più complesso del semplice riconoscimento. Data una stringa di ingresso e una insieme di espressioni regolari, classi di lessemi (es. identificatori, numeri, operazioni,... ), lo scanner deve dividere la stringa in lessemi, Problemi: quando termina un lessema: soluzione standard quando non può essere ulteriormente esteso la stringa 3.14e+sa divisa in 3.14 e + sa la stringa 3.14e+5a divisa in 3.14e+5 a per deciderlo posso essere necessari più simboli di lookahaed; cosa fare se un lessema appartiene a più classi. In Fortran: DO 5 I = 1,25 DO 5 I = 1.25 loop assignment Grammatiche e automi Sintassi dei linguaggi di programmazione 29 / 1
30 Automa per le componenti di espressioni aritmetiche Grammatiche e automi Sintassi dei linguaggi di programmazione 30 / 1
31 Generatori di scanner (analizzatori lessicali) Classe di programmi che: dato un insieme di espressioni regolari costruiscono un programma che: data una stringa, riconosce i lessemi sulla stringa scanner. Il programma può eseguire azioni, tipicamente sostituire lessemi con token. Grammatiche e automi Sintassi dei linguaggi di programmazione 31 / 1
32 (F)LEX Diffuso generatore di scanner per Unix (linux) Prende in input un file di testo con struttura definizioni %% regole %% funzioni ausiliari la parte regole, la più importante, serie di regole nella forma espressione-regolare azione espressioni-regolare sono quelle di unix (grep, emacs), ricca sintassi azione codice C, eseguito quando riconosciuta la corrispondente azione Grammatiche e automi Sintassi dei linguaggi di programmazione 32 / 1
33 Esempio %% aa bbb c printf("2a") printf("3b") printf("cc") genera un programma che: modifica coppie di a modifica terne di b raddoppia le c lasciando inalterato il resto Grammatiche e automi Sintassi dei linguaggi di programmazione 33 / 1
34 Definizioni definizioni contiene la definizione di alcune espressioni regolari nella forma nome espressione-regolare esempio letter [a-za-z] digit [0-9] number {digit}+ notare le parentesi graffe in {digit}+ nomi definiti possono essere usati nelle regole Grammatiche e automi Sintassi dei linguaggi di programmazione 34 / 1
35 Funzioni ausiliare Nella parte funzioni ausiliarie definibile del codice C da usare nelle regole. Nelle regole posso usare le variabili yytex : stringa (array) contenente il lessema riconosciuto, puntatore al primo carattere yyleng : lunghezza del lessema yyval : usate per passare parametri con il parser Grammatiche e automi Sintassi dei linguaggi di programmazione 35 / 1
36 Esempio %{ int val = 0; %} separatore [ \t\n] %% 0 {val = 2*val;} 1 {val = 2*val+1;} {separatore} {printf("%d",val);val=0;} sostituisce sequenze rappresentanti numeri binari con il loro valore, scritto in decimale. nella parte dichiarazione è possibile inserire codice da aggiunge al programma. Grammatiche e automi Sintassi dei linguaggi di programmazione 36 / 1
37 Uso standard cifra [0-9] lettera [a-za-z] identificatore {lettera}({cifra} {lettera})* %% {identificatore} {printf("(ide,%s)", yytext);} sostituisci lessema con token Grammatiche e automi Sintassi dei linguaggi di programmazione 37 / 1
38 Sintassi espressioni regolari caratteri di controllo:. * +? \ { } ( ) [ ] identificatore di espressione regolare fa inserito tra { } e{n,m} con n, m naturali: da n a m ripetizioni di e, anche e{ [^abd] tutti i caratteri esclusi a b d e 1 /e 2 lookahead, fa match con e 1 e 2 ma restituisce e 1 \n newline, \s general space, \t tab ^ inizio riga Grammatiche e automi Sintassi dei linguaggi di programmazione 38 / 1
39 Funzionamento Si considerano tutte le espressioni regolari e si seleziona quella con match più lungo, la parte lookahaed conta nella misura a parità di lunghezza, conta l ordine delle regole vengono impostate yytext, yyleng e eseguita l azione nessun matching: regola di default: copio carattere input in output Grammatiche e automi Sintassi dei linguaggi di programmazione 39 / 1
40 In pratica > flex sorgente genera un programma C lex.yy.c, compilabile con il comando > gcc lex.yy.c -ll opzione -ll necessaria per collegare alcune librerie Utilizzabile per automatizzare del text editing. Grammatiche e automi Sintassi dei linguaggi di programmazione 40 / 1
41 Analisi sintattica (parsing - parser) A partire da una grammatica libera da contesto una stringa di token costruisco l albero di derivazione della stringa, a partire dal simbolo iniziale Grammatiche e automi Sintassi dei linguaggi di programmazione 41 / 1
42 Risultati teorici Le grammatiche libere possono essere riconosciuti da automi a pila non deterministici. Automi con un uso limitato di memoria: insieme finito di stati, una pila, in cui inserire elementi finiti, passo di computazione deciso in base a: stato, simbolo in testa alla pila, simbolo in input un gradino in più rispetto agli automi finiti. Per gli automi a pila non esiste equivalenza tra: non deterministici deterministici. Grammatiche e automi Sintassi dei linguaggi di programmazione 42 / 1
43 Complessità Un automa a pila non deterministico, simulato tramite backtracking, porta a complessità esponenziali. Esistono due algoritmi [Earley, Cocke-Yunger-Kasami] capaci di riconoscere linguaggi liberi in tempo O(n³) Un automa a pila deterministico risolve il problema in tempo lineare. In pratica: complessità O(n³) non accettabile per un compilatore. ci si limita ai linguaggi riconoscibili da automi a pila deterministici: classe sufficientemente ricca da contenere quasi tutti i linguaggi di programmazione (C++ è un eccezione) Due classi di automi a pila: LL e LR Grammatiche e automi Sintassi dei linguaggi di programmazione 43 / 1
44 Automi LL(n) cerca di costruire l albero di derivazione top-down (a partire dal simbolo iniziale) usando n simboli di lookahead. Significato del nome: esamina la stringa from Left to right costruisci la derivazione Left-most usa n simboli di lookahead Grammatiche e automi Sintassi dei linguaggi di programmazione 44 / 1
45 Esempio di parsing Data la grammatica: la stringa adb viene riconosciuta con i seguenti passi: Grammatiche e automi Sintassi dei linguaggi di programmazione 45 / 1
46 Seconda derivazione la stringa abb viene rifiutata con i seguenti passi: Grammatiche e automi Sintassi dei linguaggi di programmazione 46 / 1
47 Più nel dettaglio Parsing guidato da una tabelle che in base: al simbolo in testa alla pila ai primi n simboli di input non ancora consumati, normalmente n =1 Determina la prossima azione da svolgere: regola di espansione da applicare consumare un simbolo in input e in testa alla pila (se coincidono) generare segnale di errore (stringa rifiutata) accettare la stringa (input e pila vuoti) Grammatiche e automi Sintassi dei linguaggi di programmazione 47 / 1
48 Analizzatori LL La teoria verrà presentata nel corso di Linguaggi e Compilatori (laurea magistrale) Relativamente semplici da capire e da costruire (a mano a partire da semplici grammatiche) La costruzione prevede dei passaggi di riscrittura di una grammatica in una equivalente (determina lo stesso linguaggio) dalla nuova grammatica, un algoritmo determina: se è LL(1) la tabelle delle transizioni Meno generali dell altra classe di automi LR(n), quelli effettivamente nei tool costruttori di parser. Grammatiche e automi Sintassi dei linguaggi di programmazione 48 / 1
49 Analizzatori LR approccio bottom-up: a partire dalla stringa di input, applico una serie di contrazioni, (regole al contrario) fino a contrarre tutto l input nel simbolo iniziale della grammatica. Grammatiche e automi Sintassi dei linguaggi di programmazione 49 / 1
50 Esempio Grammatiche e automi Sintassi dei linguaggi di programmazione 50 / 1
51 Più nel dettaglio Ad ogni passo si sceglie tra un azione di: shift inserisco un token in input nella pila reduce riduco la testa della pila applicando una riduzione al contrario Nella pila introduco una coppia l azione da compiere viene decisa guardando la componente stato in testa alla pila (non serve esaminarla oltre) n simboli di input, per l automa LR(0) Grammatiche e automi Sintassi dei linguaggi di programmazione 51 / 1
52 Automi LR esiste un algoritmo che a partire da: grammatica libera L mi permette di: stabilire se L è LR costruire l automa a pila relativo insieme degli strati tabella delle transazioni come deve comportarsi ĺ automa ad ogni passo. In realtà esisto tre versioni di questo algoritmo. Grammatiche e automi Sintassi dei linguaggi di programmazione 52 / 1
53 Varie versioni degli automi LR In ordine crescente per complessità (numero di stati) e ampiezza di linguaggi riconosciuti, a parità del numero n di simboli di lookahead. SLR(n) LALR(n) LR(n) Aumentando n si allarga l insieme di linguaggi riconosciuti. Grammatiche e automi Sintassi dei linguaggi di programmazione 53 / 1
54 Analizzatori LALR Compromesso ideale tra numero di stati e varietà dei linguaggi riconosciuti Costruzione piuttosto complessa: da spiegare e da implementare. Bel esempio di applicazione di risultati teorici: Donald Knuth: 1965, parser LR, (troppi stati per i computer dell epoca) Frank DeRemer: SLR and LALR, (pratici perché con meno stati). LALR usato dai programmi generatori di parser: Yacc, Bison, Happy. Grammatiche e automi Sintassi dei linguaggi di programmazione 54 / 1
55 Yacc (Yet Another Compiler-Compiler) Generatore di parser tra i più diffusi: Riceve in input una descrizione astratta del parser: descrizione di una grammatica libera un insieme di regole da applicare ad ogni produzione Restituisce in uscita: programma C che implementa il parser l input del programma sono token generati da uno scanner (f)lex Disponibili varianti di Yacc per generare codice in altri linguaggi di programmazione: ML, Ada, Pascal, Java, Python, Ruby, Go, Haskell, Erlang. Grammatiche e automi Sintassi dei linguaggi di programmazione 55 / 1
56 Struttura di un programma Yacc: %{ prologo %} definizioni %% regole %% funzioni ausiliarie Una produzione della forma nonterm corpo1 corpok è espressa in Yacc con le regole: nonterm : corpo1 {azione semantica1 } corpok {azione semanticak } ; Grammatiche e automi Sintassi dei linguaggi di programmazione 56 / 1
57 Esempio Definizioni %{ /* PROLOGO */ #define YYSTYPE double #include <math.h> #include <stdio.h> %} /* DEFINIZIONI */ %token NUM %left - + %left * / %left NEG /* meno unario */ Grammatiche e automi Sintassi dei linguaggi di programmazione 57 / 1
58 Esempio - Regole %% /* REGOLE E AZIONI SEMANTICHE */ input: /* empty */ input line ; line : \n exp \n { printf ("\t%.10g\n", $1); } ; exp : NUM { $$=$1; } exp + exp { $$=$1+$3; } exp - exp { $$=$1 $3; } exp * exp { $$=$1*$3; } exp / exp { $$=$1/$3; } - exp %prec NEG { $$ = $2; } ( exp ) { $$ = $2; } ; Grammatiche e automi Sintassi dei linguaggi di programmazione 58 / 1
59 Esempio - Funzioni ausiliarie %% /* Funzioni Ausiliarie */ #include "lex.yy.c" Grammatiche e automi Sintassi dei linguaggi di programmazione 59 / 1
60 Differenze tra YACC e LALR YACC produce codice C che implementata un automa LALR ma: non esiste uno stretto controllo che la grammatica sia LALR: grammatiche non LALR vengono accettate ma producono automi che possono fare scelte sbagliate, rifiutano parole valide. grammatiche ambigue sono accettate, attraverso definizione si possono togliere ambiguità, metodo empirico, le definizioni possono essere incomplete e YACC sceglie secondo le sue politiche. il codice C, non solo riconosce la stringa ma la valuta valutazione bottom-up - come il riconoscimento, risultati parziali inserite nella pila, la parte azioni delle regole specificano come valutare una parola a partire dalle sue sotto-parole. Grammatiche e automi Sintassi dei linguaggi di programmazione 60 / 1
Descrizione di un linguaggio di programmazione. Sintassi dei linguaggi di programmazione. Descrizione della sintassi linguaggio di programmazione
Descrizione di un linguaggio di programmazione Sintassi dei linguaggi di programmazione Grammatiche e automi sintassi: quali sequenze di caratteri costituiscono programmi, la loro struttura semantica:
DettagliLinguaggi e Traduttori: Analisi sintattica
Linguaggi e Traduttori: Analisi sintattica Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-Lab) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova
DettagliLINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione Fortran Cobol Basic Pascal Python C
DettagliLINGUAGGI DI ALTO LIVELLO
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic
DettagliANALISI SINTATTICA LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA
ANALISI SINTATTICA LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA AUTOMI PUSHDOWN input u t w $ v x y z $ pila tabella controllo 2 ARGOMENTI Il compito dell'analisi sintattica Generazione automatica Trattamento
DettagliLinguaggi e Ambienti di Programmazione
Linguaggi e Ambienti di Programmazione Principi e tecniche diffuse che si incontrano spesso nelle applicazioni dell informatica. Compilatori Editor di struttura: riceve in input una sequenza di comandi
DettagliAnalisi Sintattica. Maria Rita Di Berardini. Universitá di Camerino Ruolo del parser
Ruolo del parser Analisi 1 1 Dipartimento di Matematica e Informatica Universitá di Camerino mariarita.diberardini@unicam.it Ruolo del parser Ruolo dell analisi sintattica Ruolo del parser Metodologie
DettagliLinguaggi di Programmazione
Linguaggi di Programmazione Lezione 4 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 6 Marzo 2007 Regole della grammatica di un linguaggio
DettagliLINGUAGGI DI ALTO LIVELLO
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic
DettagliLINGUAGGI DI ALTO LIVELLO
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 Linguaggi di alto livello Barriera di astrazione C Fortran Modula-2 Cobol Basic Pascal
DettagliVerificare se una grammatica e LL(1) e costruirne la tabella di parsing. Verificare se una grammatica e LR(0) e costruirne la tabele ACTION e GOTO
ANALISI SINTATTICA TIPO 1: Data un linguaggio scrivere una grammatica che lo generi TIPO 2: Verificare se una grammatica non contestuale è ambigua TiPO 3: Verificare se una grammatica e LL(1) e costruirne
DettagliYet Another Compiler-Compiler. Generazione automatica di analizzatori sintattici
Yet Another Compiler-Compiler Generazione automatica di analizzatori sintattici 2 YACC Yet Another Compiler-Compiler YACC (Bison) è un generatore di analizzatori sintattici a partire dalla descrizione
DettagliProgrammazione II. Lezione 3. Daniele Sgandurra 26/10/2010.
Programmazione II Lezione 3 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 26/10/2010 1/35 Programmazione II Lezione 3 26/10/2010 Sommario 1 2 Semantica 2/35 Programmazione II Lezione 3 26/10/2010 Parte
DettagliAnalizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser.
Analizzatore lessicale o scanner Dispensa del corso di Linguaggi e Traduttori A.A. 2005-2006 Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Lo scanner,
DettagliLINGUAGGI DI ALTO LIVELLO
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware Linguaggi di alto livello AN - 1995 Linguaggi di alto livello AN - 1995 Evoluzione dei
DettagliLinguaggi e Traduttori: Analisi lessicale
Linguaggi e Traduttori: Analisi lessicale Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-La) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova
DettagliBarriera di astrazione. Barriera di astrazione. macchina virtuale. non sono quelle della macchina hardware. Algol. Ada. Lisp. Lisp.
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Cobol Basic Pascal Python Modula-2
DettagliDall algoritmo al calcolatore: concetti introduttivi. Fondamenti di Programmazione
Dall algoritmo al calcolatore: concetti introduttivi Fondamenti di Programmazione Algoritmo Problema o compito Preparazione di una torta Programmazione del VCR MCD tra due numeri Algoritmo sequenza precisa
DettagliFondamenti d Informatica: linguaggi formali. Barbara Re, Phd
Fondamenti d Informatica: linguaggi formali Barbara Re, Phd Agenda } Introdurremo } La nozione di linguaggio } Strumenti per definire un linguaggio } Espressioni Regolari 2 Linguaggio } Da un punto di
DettagliSchema generale parser LR
Schema generale parser LR Input' a 1' 8'8'8' a i' 8'8'8' a n' $' ' Pila' s m' s m81' 8'8'8 ' Programma' di'parsing' LR' ' ACTION' ' ' GOTO' ' Output' Parser diversi di eriscono per la definizione delle
DettagliAutomi e Linguaggi Formali
Linguaggi di programmazione Automi e Linguaggi Formali A.A. 2014-2015 Enrico Mezzetti emezzett@math.unipd.it Struttura di un compilatore e fasi principali 01 Ottobre 2014 Linguaggio di programmazione e
DettagliLinguaggi di alto livello. Barriera di astrazione. Pascal. Cobol. Fortran. Basic. Modula-2. Lisp. Simula67 Scheme. Smalltalk C++ Prolog AN
Linguaggi di alto livello Barriera di astrazione C Fortran Modula-2 Cobol Basic Pascal Algol Ada Lisp Smalltalk Simula67 Scheme C++ Prolog ML AN - 1995 Linguaggi di alto livello IMPERATIVI Fortran Cobol
DettagliC++ Barriera di astrazione. Barriera di astrazione. Basic. Basic. Lisp. Lisp. Pascal. Prolog. Pascal. Prolog. Cobol. Fortran IMPERATIVI FUNZIONALI
Linguaggi di alto livello Barriera di astrazione C Fortran Cobol Modula-2 Basic Pascal Algol Ada Lisp Smalltalk Simula67 Scheme C++ Prolog ML AN - 1995 Linguaggi di alto livello IMPERATIVI C Fortran Modula-2
DettagliBackus Naur Form. Paolo Bison. Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova. BNF, Paolo Bison, A.A ,
p.1/19 Backus Naur Form Paolo Bison Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova Linguaggio di programmazione p.2/19 strumento linguistico per scrivere una sequenza di istruzioni (programma)
DettagliLinguaggi di Programmazione
Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio
DettagliEspressioni regolari in UNIX p.1/19
Espressioni regolari in UNIX Violetta Lonati a Dipartimento Scienze dell Informazione Università degli Studi di Milano a E garantito il permesso di copiare, distribuire e/o modificare i materiali cont
DettagliI Linguaggi di Programmazione
I Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio
DettagliLINGUAGGI DI ALTO LIVELLO
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware Linguaggi di alto livello Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic Ada
DettagliInterpreti, compilatori e semantica operazionale
Interpreti, compilatori e semantica operazionale 1 Linguaggi di programmazione Come si comprendono le caratteristiche di un linguaggio di programmazione? Molte risposte diverse manuali, documentazione
DettagliSommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio (1) Linguaggio (2)
Sommario Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione 1 2 Linguaggio (1) Linguaggio (2) Insieme di sequenze di simboli,
DettagliLinguaggi e Traduttori: Analisi sintattica
Linguaggi e Traduttori: Analisi sintattica Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-Lab) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova
DettagliFasi di un Compilatore
Dipartimento di Matematica e Informatica Università di Camerino Un implementazione compilativa di un linguaggio di programmazione viene realizzata tramite un programma che prende il nome di compilatore
DettagliProgramma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore
Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Algoritmi e programmi Algoritmo Sequenza
DettagliCorso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 4 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 4 Marzo 2008 Derivazioni canoniche Una derivazione
DettagliCorso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 5 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 10 Marzo 2008 Struttura di un compilatore
DettagliSupplemento alle dispense di Sintassi
Supplemento alle dispense di Sintassi Luca Tesei 20 ottobre 2002 1 Formalizzazione Lo scopo di questa sezione è quello di presentare in maniera formale e precisa le nozioni di Automa e di Grammatica Libera
DettagliEsercitazioni di Linguaggi e Traduttori
1 Linguaggi CF e Riconoscitori 2 Introduzione a Yacc Introduzione a YACC Definizione dei simboli Codifica della grammatica Formato del programma prodotto da YACC Ambiguità e conflitti Conflitti shift-reduce
DettagliLinguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione
Sommario Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione 1 2 Linguaggio (1) Linguaggio (2) Insieme di sequenze di simboli,
DettagliRiconoscitori e analizzatori sintattici. Scanning e parsing. Funzionamento di un parser: la tecnica Shift/Reduce. Esempio
POLITECNICO I TORINO Laboratorio di Compilatori Corso di Linguaggi e Traduttori mail: stefano.scanzio@polito.it sito: Riconoscitori e analizzatori sintattici ata una grammatica non ambigua ed una sequenza
DettagliLinguaggi, Traduttori e le Basi della Programmazione
Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2011/2012 docente: Prof. Ing. Michele Salvemini Sommario Il Linguaggio I Linguaggi di Linguaggi
DettagliIl linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1
Il linguaggio C I linguaggi di programmazione ad alto livello sono linguaggi formali ( sintassi e semantica formalmente definite) però sono compatti e comprensibili. Le tipologie di linguaggi sono: procedurali
DettagliAnalisi lessicale (scanner)
Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2013-2014 Linguaggi Formali e Compilatori Analisi lessicale (scanner) Giacomo PISCITELLI Distinzione terminologica stringa lessicale o lessema
DettagliEsempio. Grammatica E! T E!! T! *F T " F! (E) i. procedure E. ! if cc in FIRST (TE )! then T; E!!! else ERRORE (1); E! T E
Esempio Grammatica E! T E!! E! + T E " T! F T T! *F T " F! (E) i E! T E T! F T E! + T E "!! tabella codici di errore # 1. omissione di operando 2. omissione di operatore 3. simbolo inatteso 4. carattere
DettagliLinguaggi di Programmazione dall assembler ai linguaggi di alto livello
Linguaggi di Programmazione dall assembler ai linguaggi di alto livello LINGUAGGIO MACCHINA 0 READ 8 READ 9 LOADA 8 3 LOADB 9 4 MUL 5 STOREA 8 6 WRITE 8 7 HALT 8 DATO INTERO 9 DATO INTERO Rappresentazione
DettagliAnalisi lessicale (scanner)
Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2011-2012 Linguaggi Formali e Compilatori Analisi lessicale (scanner) Giacomo PISCITELLI Ruolo dell Analizzatore lessicale Compito di un analizzatore
DettagliEsempio. Le istruzioni corrispondono a quelle di sopra, ma sono scritte in modo simbolico. E indipendente dalla machina
Il compilatore C Astrazione Linguaggio macchina implica la conoscenza dei metodi usati per la rappresentazione dell informazioni nella CPU Linguaggio Assembly è il linguaggio delle istruzioni che possono
Dettaglio Introduzione agli algoritmi o Rappresentazione delle Informazioni o Architettura del calcolatore o Reti di Calcolatori
Programma del corso o Introduzione agli algoritmi o Rappresentazione delle Informazioni o Architettura del calcolatore o Reti di Calcolatori o Elementi di Programmazione Algoritmi e programmi o Algoritmo
DettagliPROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI ESEMPIO
PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica Una grammatica permette di stabilire se una sequenza di simboli
DettagliAutomi e Linguaggi Formali
Automi e Linguaggi Formali Analisi Sintattica A.A. 2014-2015 Alessandro Sperduti sperduti@math.unipd.it Ruolo dell analisi sintattica Un compilatore deve produrre codice oggetto e deve anche controllare
DettagliLinguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl
Approfondimento 2.1 Non è questo il testo dove trattare esaurientemente queste tecniche semantiche. Ci accontenteremo di dare un semplice esempio delle tecniche basate sui sistemi di transizione per dare
DettagliLaboratorio di Informatica I
Struttura della lezione Lezione : Elementi lessicali del C Vittorio Scarano Corso di Laurea in Informatica Elementi lessicali e token Costanti Identificatori Operatori operatori di incremento/decremento
DettagliIntroduzione alla programmazione in linguaggio C
Introduzione alla programmazione in linguaggio C Il primo programma in C commento Header della libreria Funzione principale Ogni istruzione in C va terminata con un ; Corso di Informatica AA. 2007-2008
DettagliProgrammazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica
Programmazione Dipartimento di Matematica Ing. Cristiano Gregnanin Corso di laurea in Matematica 29 febbraio 2016 1 / 28 Linguaggi 2 / 28 Linguaggi 3 / 28 Linguaggi di alto livello Si basano su una macchina
DettagliLinguaggi Regolari e Linguaggi Liberi
Linguaggi Regolari e Linguaggi Liberi Linguaggi regolari Potere espressivo degli automi Costruzione di una grammatica equivalente a un automa Grammatiche regolari Potere espressivo delle grammatiche 1
DettagliLinguaggi Regolari e Linguaggi Liberi. Linguaggi Regolari. Determinismo vs Non determinismo. Potere espressivo
e Linguaggi Liberi Linguaggi regolari Potere espressivo degli automi Costruzione di una grammatica equivalente a un automa Grammatiche regolari Potere espressivo delle Tutti i linguaggi che possono essere
DettagliScopo del progetto è la costruzione di un compilatore per il linguaggio descritto qui di seguito.
Corso di Linguaggi e Traduttori Anno Accademico 2017 2018 Prof. Giovanni Pighizzini Progetto d esame Scopo del progetto è la costruzione di un compilatore per il linguaggio descritto qui di seguito. Variabili
DettagliAutomi deterministici e non
Automi deterministici e non Negli esempi visti fin ora gli automi avevano sempre relazioni di transizione per cui per un dato elemento del dominio coppia (s, v), dove s è uno stato (sorgente) e v un simbolo,
DettagliLinguaggi di Programmazione e Compilatori
Maria Rita Di Berardini Linguaggi di Programmazione e Compilatori Raccolta Esercizi 10 giugno 2009 Università di Camerino Dipartimenento di Matematica e Informatica Indice 1 Analisi Lessicale...........................................
DettagliCorso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 11 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 06 Aprile 2009 Riassunto delle puntate
DettagliInformatica e Laboratorio di Programmazione Automi Alberto Ferrari. Alberto Ferrari Informatica e Laboratorio di Programmazione
Informatica e Laboratorio di Programmazione Automi Alberto Ferrari Alberto Ferrari Informatica e Laboratorio di Programmazione automa o automa: macchina astratta o realizza un certo algoritmo, secondo
DettagliCorso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 3 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 09 Marzo 2009 Riassunto delle puntate
DettagliDispensa YACC. 1.1 YACC: generalità
Dispensa YACC 1.1 YACC: generalità Il tool Yacc (acronimo per Yet Another Compiler Compiler) è uno strumento software che a partire da una specifica grammaticale context free di un linguaggio scritta in
DettagliLez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1
Lez. 8 La Programmazione Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1 Dott. Pasquale De Michele Dott. Raffaele Farina Dipartimento di Matematica e Applicazioni Università di Napoli
DettagliUnità Didattica 2 I Linguaggi di Programmazione
Unità Didattica 2 I Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche
DettagliPROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica G=(V n,v t
PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica Una grammatica permette di stabilire se una sequenza di simboli
DettagliEspressioni regolari
spressioni Regolari Un FA (NFA o DFA) e una macchina a stati finiti che riconosce linguaggi regolari. Una espressione regolare e un modo dichiarativo (o algebrico) per descrivere un linguaggio regolare.
DettagliDispensa 2. Data una grammatica context free esistono tre metodi diversi per costruirne la parsing table per un parser LR:
Dispensa 2 2.1 Costruzione Parsing Table LR: generalità Come tutti i parser tabellari predittivi, anche i parser LR possono essere applicati solo a parsing table senza conflitti (ossia entrate multiple)
DettagliAnalizzatore Lessicale Parte I Scanner
Analizzatore Lessicale Parte I Scanner Sommario Dispensa di Linguaggi di Programmazione Corrado Mencar, Pasquale Lops In questa dispensa si descrive un approccio alla costruzione di un analizzatore lessicale
DettagliProgrammazione in Java (I modulo)
Programmazione in Java (I modulo) Lezione 4 Variabili di tipo primitivo. Dichiarazione di costanti Conversioni di tipo: operatore cast Altri operatori di assegnamento Operazioni aritmetiche e di confronto
DettagliLinguaggi Regolari e Linguaggi Liberi
Linguaggi Regolari e Linguaggi Liberi Potenza espressiva degli automi Potenza espressiva delle grammatiche 9/11/2004 Programmazione - Luca Tesei 1 Linguaggi Regolari Tutti i linguaggi che possono essere
DettagliAnalizzatori sintattici a discesa ricorsiva
Analizzatori sintattici a discesa ricorsiva E uno schema di analizzatore che sfrutta la descrizione grammaticale in EBNF adatto a grammatiche LL(1). Si basa sulla scrittura di procedure ricorsive ricavate
DettagliPumping lemma per i linguaggi Context-free
Pumping lemma per i linguaggi Context-free Sia L un linguaggio context-free. E possibile determinare una costante k, dipendente da L, tale che qualunque stringa z # L con z > k si può esprimere come z=
DettagliASTRAZIONE. Sono indipendenti dalla macchina hardware sottostante ASTRAZIONE 1
ASTRAZIONE Esistono linguaggi a vari livelli di astrazione Linguaggio Macchina: implica la conoscenza dei metodi utilizzati per la rappresentazione delle informazioni Linguaggio Macchina e Assembler: implica
DettagliAutomi a pila. Dipartimento di Elettronica e Informazione Politecnico di Milano. 17 marzo 2017
Automi a pila Dipartimento di Elettronica e Informazione Politecnico di Milano 17 marzo 2017 Aumentiamo la potenza di un FSA Descrizione operativa dei limiti Un FSA ha un Organo di Controllo (OC) con memoria
DettagliElementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I
Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave
DettagliLez. 5 La Programmazione. Prof. Salvatore CUOMO
Lez. 5 La Programmazione Prof. Salvatore CUOMO 1 2 Programma di utilità: Bootstrap All accensione dell elaboratore (Bootsrap), parte l esecuzione del BIOS (Basic Input Output System), un programma residente
DettagliIntroduzione alla programmazione. Alice Pavarani
Introduzione alla programmazione Alice Pavarani Il linguaggio C Creato da Dennis Ritchie nel 1972 presso i Bell Laboratories Linguaggio di programmazione procedurale, strutturato Linguaggio ad alto livello
DettagliSommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio. Messaggio
Sommario Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione 1 2 Linguaggio Messaggio Insieme di sequenze di simboli, le parole,
DettagliAutomi e Linguaggi Formali
E-mail: frossi@math.unipd.it rario e ricevimento Orario: Lunedi, Martedi, Mercoledi, Giovedi 13:30-15:30 LUM250 Crediti: 8 crediti formativi, circa 64 ore di lezione Ricevimento: Martedi 11:00-13:00, studio
DettagliL intero è o il valore zero o una stringa di cifre che inizia con una cifra diversa sa zero.
ANALISI SINTATTICA Data un linguaggio scrivere una grammatica che lo generi ESERCIZIO 1 Definire una grammatica per il linguaggio L = {ww w appartiene a (a, b)*} ESERCIZIO 2 Dato l alfabeto T=[0,1,2,3,4,5,6,7,8,9,/}
DettagliIl calcolatore. Architettura di un calcolatore (Hardware)
Il calcolatore Prima parlare della programmazione, e' bene fare una brevissima introduzione su come sono strutturati i calcolatori elettronici. I calcolatori elettronici sono stati progettati e costruiti
DettagliGrammatiche. Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione
Grammatiche Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione Esempio dei numeri interi Si consideri il linguaggio
DettagliIntroduzione al C. InformaticaB. Daniele Loiacono
Introduzione al C InformaticaB Facciamo un passo indietro Compilare o Interpretare? q Come rendo comprensibili al calcolatore i programmi scritti in un linguaggio di programmazione (ad es. C, C++, Java)?
DettagliElementi di programmazione
Fondamenti di Informatica per la Sicurezza a.a. 2003/04 Elementi di programmazione Stefano Ferrari Università degli Studi di Milano Dipartimento di Tecnologie dell Informazione Stefano Ferrari Università
DettagliLinguaggi. Che cos è un linguaggio di programmazione? Aspetti da studiare e comprendere per poter scrivere programmi:
Linguaggi Che cos è un linguaggio di programmazione? Aspetti da studiare e comprendere per poter scrivere programmi: Sintassi: forma delle frasi, correttezza sintattica Semantica: significato delle frasi,
DettagliDall algoritmo al calcolatore: concetti introduttivi. Algoritmo. Problema: consumo medio 9/27/2018. Fondamenti di Programmazione 3
Dall algoritmo al calcolatore: concetti introduttivi Fondamenti di Programmazione Algoritmo Problema o compito Preparazione di una torta Programmazione del VCR MCD tra due numeri Algoritmo sequenza precisa
DettagliAutomi e Linguaggi Formali
Automi e Linguaggi Formali Espressioni regolari A.A. 2014-2015 Enrico Mezzetti emezzett@math.unipd.it Espressioni regolari Un FA (NFA o DFA) e un metodo per costruire una macchina che riconosce linguaggi
DettagliElementi di programmazione
Fondamenti di Informatica per la Sicurezza a.a. 2008/09 Elementi di programmazione Stefano Ferrari UNIVERSITÀ DEGLI STUDI DI MILANO DIPARTIMENTO DI TECNOLOGIE DELL INFORMAZIONE Stefano Ferrari Università
DettagliPrimi passi con JFlex
Primi passi con JFlex Luca Chiodini Abstract Ci proponiamo di muovere i primi passi nel mondo dell analisi lessicale e della produzione automatica di un analizzatore lessicale. Verrà mostrato l uso di
DettagliAssegnazione di una variabile
Assegnazione di una variabile Per scrivere un valore dentro una variabile si usa l operatore di assegnazione, che è rappresentato dal simbolo =. Quindi, se scrivo int a; a = 12; assegno alla variabile
DettagliI linguaggi di programmazione
I linguaggi di programmazione sono stati introdotti per facilitare ai programmatori il compito di scrittura dei programmi Sono linguaggi simbolici, in continua evoluzione Sono definiti da un insieme di
Dettagli