Il lessico descrive le parole o elementi lessicali che compongono le frasi. Nei linguaggi artificiali gli elementi lessicali possono essere assegnati
|
|
- Aloisio Cipriani
- 6 anni fa
- Visualizzazioni
Transcript
1 Il lessico descrive le parole o elementi lessicali che compongono le frasi. Nei linguaggi artificiali gli elementi lessicali possono essere assegnati alle seguenti classi: Parole chiave: sono particolari parole fisse che caratterizzano vari tipi di frasi o strutture. Ad es.: if, begin, subprogram, write. Le parole chiave sono indeclinabili. Delimitatori, operatori e caratteri compositi: come i precedenti sono delle parole fisse composte però di caratteri anche non alfabetici. Ad es. i commenti sono preceduti nel linguaggio Ada dai due trattini -- ; l operatore maggiore o eguale è scritto come >= ed in altri linguaggi come.gte., acronimo di greater or equal Classi lessicali aperte: queste comprendono un numero illimitato di elementi lessicali, che devono avere la struttura di un linguaggio regolare ossia a stati finiti. Sono esempi tipici di classi aperte i seguenti: nomi o identificatori di variabili, di sottoprogrammi, o in generale di varie entità del linguaggio; ad es. gli dentificatori di molti linguaggi sono definiti dalla espressione regolare: identificatore = lettera (lettera cifra)* costanti quali i numeri interi o reali o le stringhe alfanumeriche. 1
2 Vi è una importante differenza tra le parole chiave e le classi lessicali aperte: le prime non hanno altra informazione che il proprio nome. Invece tanto gli identificatori quanto le costanti denotano delle entità che hanno un valore o certe altre proprietà chiamate degli attributi semantici. Le classi lessicali sono solitamente delle stringhe appartenenti ad un linguaggio formale di tipo regolare pertanto riconoscibili dagli automi a stati finiti (o macchine sequenziali). L analizzatore lessicale (scanner) è un algoritmo che realizza la funzione di transizione di un automa finito. L analizzatore lessicale deve verificare se una sottostringa del testo sorgente corrisponde ad un elemento lessicale valido Tradurre la sottostringa in una opportuna codifica che faciliti la successiva elaborazione da parte del traduttore. La codifica deve contenere due informazioni: l identificativo della classe lessicale cui l elemento appartiene e l attributo semantico (nel caso ve ne sia uno associato a tale classe). Ad es. la stringa è riconosciuta come costante numerica reale e tradotta nella coppia ( costante_reale,valore_della_costante). 2
3 Token: unità lessicale restituita dall analizzatore lessicale e fornita come ingresso al parser (e.g., num, id, relop) Lessico: stringa di caratteri che rappresentano un particolare token Pattern - una descrizione del lessico che corrisponde al token Fornisce un modo per isolare le regole di basso livello dalle strutture che costituiscono la sintassi del linguaggio Suddividere la frase in ingresso in elementi lessicali (detti tokens ) da fornire al parser Eliminare gli spazi bianchi e i commenti Inserire i simboli nella tabella dei simboli Non esiste nessuna necessità di separare analisi lessicale da analisi sintattica se non la maggiore semplicità di gestione dei moduli in modo separato 3
4 L analizzatore lessicale legge il programma sorgente carattere per carattere e produce I tokens. Spesso un analizzatore lessicale non ritorna una lista di tokens, ma ritorna in token quando il parser richiede un token. source program Scanner token get next token Parser source program Scanner lista di token Parser 1. Keywords (e.g., IF) 2. Segni di punteggiatura (e.g., ;) 3. Operatori costituiti da caratteri singoli e multipli (e.g., =, ==, <=) 4. Identificatori 5. Numeri Interi Reali 6. Commenti 4
5 Il token rappresenta un insieme di stringhe descritte da un pattern. Identificatore representa un insieme di stringhe che iniziano con una lettera e continuano con lettere e cifre La stringa reale (newval) è chiamata lessico. Tokens: identificatore, numero, addop, delimeter, Dato che un token può corrispondere ad uno o più elementi lessicali altre informazioni possono essere aggiunte per specificarlo. Queste informazioni addizionali sono chiamati attributi. Implementativamente un token può avere un singolo attributo che ragruppa tutte le informazioni Per gli identificatori questo attributo e un puntatore alla tabella dei simboli, e la tabella dei simboli contiene I reali attributi del token x = indice + 2 TOKEN_ID(6) TOKEN_ASSEGN TOKEN_ID(5) TOKEN_SOMMA TOKEN_NUM(7) 5
6 Il risultato dell analisi lessicale è una sequenza di tokens dove un token è una 3-tuple: 1. Tipo del Token (id, keyword, etc.) 2. Attributo del token (può essere un valore o un puntatore alla tabella dei simboli) 3. Posizione del token [optional] Per esempio, la stringa 123 è il valore di un token il cui tipo è intero la stringa A1 è il valore di un token il cui tipo è identificatore Qualche volta il valore è ignorato, per esempio una keyword può essere completamente specificata dal suo tipo. 1. Realizzazione procedurale o a controllo di programma (hard-coded): un programma ad-hoc per la grammatica G 1. grammatica regolare programma ad hoc 2. Espressione regolare programma ad hoc 2. Realizzazione tabulare interpretata: una struttura dati rappresenta DFA riconoscitore della grammatica G e un programma indipendente dalla grammatica G 1. grammatica regolare DFA 2. Espressione regolare DFA 3. Automaticamente con uno SCANNER GENERATOR 6
7 Si scrive Espressione regolare Codice per l analisi del linguaggio una sequenza per ogni concatenazione un test per ogni unione un ciclo per ogni stella di kleen if (CurrentChar == c'){ read(currentchar) while(currentchar == c CurrentChar == 0 ) read(currentchar) return ok if (read(currentchar) == 0 ) return ok return errore 7
8 if (CurrentChar == '/'){ read(currentchar) if (CurrentChar == '/') do read(currentchar) while (!CurrentChar in {eol, eof) else //Signal lexical error else // Signal lexical error if (CurrentChar == eol) // Process valid token else //Signal lexical error Grammatica regolare Codice per l analisi della grammatica Si scrive una funzione per ogni non terminale Si scrive un test per ogni alternativa Si richiama la funzione per ogni nonterminale che compare in RHS 8
9 V = {S, A T = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9 P = { S 0 S 1 A 2 A 3 A 4 A 5 A 6 A 7 A 8 A 9A A 0 A 1 A 2 A 3 A 4 A 5 A 6 A 7 A 8 A 9A int S () { leggi(carattere) if (carattere == 0) { leggi(carattere) if (carattere == ) return OK return ERRORE else if (carattere == 1..9) return A rerturn ERRORE int A () {leggi(carattere) if (carattere == ) return OK if (carattere == 0..9) return A rerturn ERRORE 9
10 Espressione regolare Automa a stati finiti non deterministico Automa a stati finiti deterministico Implementazione di un DFA s s 0 { inizializzazione stato iniziale c nextchar {legge il successivo carattere while (c!= eol) do { do until la fine della stringa begin s move(s,c) { funzione di transizione c nextchar end if (s in F) then { se s è uno stato finale return yes else return no 10
11 Implementazione di un DFA State = StartState while (true){ if (CurrentChar == eof) break NextState = T[State][CurrentChar] if(nextstate == error) return errore State = NextState read(currentchar) if (State in F) return ok // token valido else return errore // errore lessicale La maggior parte di linguaggi utilizza reserved words (if, while, switch, etc). In tal caso lo scanner deve decidere se una sequenza di caratteri è un identificatore o una parola riservata. Questa distinzione è essenziale in quanto le parole riservate e identificatori hanno token differenti e vengono analizzate in modo diverso. Come può uno scanner decidere quali token sono identificatori quali parole riservate? Si puo procedere effettuando la scansione utilizzando il modello degli identificatori e poi cercare il token in una speciale tabella delle "parole riservate". E possibile definire gli identificatori come stringhe complementari delle espressioni regolari rappresentanti le parole riservate. Dato che gli scanner generetor di norma non favoriscono tale approccio. Si definiscone espressioni regolari per ogni parola riservata, e per gli identificatori. Dato che le definizioni si sovrappongono si definiscono delle priorita. Questo approccio è quello usualmente utilizzato. 11
12 Per alcuni tokens è necessario una forma numerica o binaria. Per esempio per gli interi è necessario trasformare una stringa di cifre in una rappresentazione interna (binaria) che rispetta la codifica. Sappiamo che il formato del token è valido (lo scanner verifica cio in modo preliminare), ma: La stringa può essere rapresentata utilizzando 32 o 64 bit. Cosa accade quando viene ragiunta la fine del file di input? Può essere creado pseudocarattere per EOF In Java, ad esempio, InputStream.read(), che legge un singolo byte, restituisce -1 quando viene raggiunta la fine file. Ciò carattere permette la definizione di un token EOF che può essere passatp al parser. Un token Eof è utile perché permette al parser di verificare che la fine logica di un programma corrisponde con la fine fisica. Molti parser richiedono l esistenza di un tale token. Gli scanner generator (Lex e Jlex) creano automaticamente un token Eof 12
13 Possiamo permettere agli automi di leggere oltre il successivo carattere di input. Questa caratteristica può essere necessaria in alcuni casi paeticolari Ad esempio questa caratteristica è necessaria in uno scanner per FORTRAN. DO 10 J = 1,100 specifica un loop. DO 10 J = è una istruzione di assegnazione. (attenzione i caratteri bianchi sono insignificanti e quindi il nome della variabile e DO10J) Lo scanner FORTRAN decide se la O è l utlimo cararrere del DO token solo dopo aver letto la virgola (o il punto). Ad esempio in PASCAL e possono essere distinti solo dopo il carattere successivo al secondo punto. Una sequenza di caratteri per la quale non esiste un token valido è un errore lessicale. Gli errori lessicali non sono comuni ma devono comunque essere gestiti dallo scanner. Non è opportuno bloccare il processo di compilazione per un tale errore. Gli approcci alla gestione degli errori lessicali sono: Cancellare i caratteri letti fino al momento dell errore e ricominciare le operazioni di scanning Eliminare il primo carattere letto dallo scanner e riprendere la scansione in corrispondenza del carattere successivo. Spesso un errore lessicale è causato dalla comparsa di qualche carattere illegale, soprattutto all'inizio di un token In questo caso i due approcci sono equivalenti 13
14 Lex/Flex/JLex Poiché la trasformazione di espressioni regolari in automi a stati finiti deterministici e la implementazione di questi ultimi sono processi meccanici (e noiosi), spesso si utilizza un generatore automatico di analizzatori lessicali. Lex è un noto generatore di scanner di Unix. Costruisce uno scanner in C da un insieme di espressioni regolari che definiscono i token. Flex è una versione più recente e più veloce di Lex. JLex è una versione Java di Lex. Si genera uno scanner Java (le espressioni regolari sono molto simili a quelle utilizzati da Lex e Flex). Lex, Flex e JLex sono in gran parte nonprocedurali Non c'è bisogno di dire come gli strumenti devono eseguire la scansione. Tutto ciò che serve è dire ciò che si vuole scandire dando la definizione dei token validi. Questo approccio semplifica notevolmente la costruzione di uno scanner, dal momento che la maggior parte dei dettagli di scansione (I/O, buffering,, ecc), sono gestiti automaticamente. 14
15 Lex è un generatore che accetta in ingresso un insieme di espressioni regolari e di azioni associate a ciascuna espressione e produce in uscita un programma che riconosce tali espressioni. Espressioni regolari LEX Programma C Lex produce un programma C, privo di main() il cui punto di accesso è dato dalla funzione int yylex(). Tale funzione legge dal file yyin e ricopia sul file yyout il testo non riconosciuto. Se non specificato diversamente nelle azioni (tramite l istruzione return), tale funzione termina solo quando l intero file di ingresso è stato analizzato. Al termine di ogni azione l automa si ricolloca sullo stato iniziale pronto a riconoscere nuovi simboli. Per default, i file yyin e yyout sono inizializzati rispettivamente a stdin e stdout. Il programmatore può alterare questa situazione re-inizializzando tali variabili globali. 15
16 Un file sorgente per lex è composto di tre sezioni distinte separate dal simbolo %%. La prima sezione contiene le definizioni e può essere vuota. La seconda sezione contiene le regole sotto forma di coppie espressione_regolare azione. Le azioni devono iniziare sulla stessa riga in cui termina l espressione regolare e ne sono separate tramite spazi o tabulazioni. La terza sezione contiene le procedure di cui il programmatore intende servirsi: se è vuota, il separatore %% viene omesso. Per semplificare la gestione di espressioni regolari complesse o ripetitive, è possibile definire identificatori che designano sotto-espressioni regolari. Ogni riga della prima sezione il cui primo carattere non sia di spaziatura è una definizione: numero [+-]?[0-9]+ La sotto-espressione così definita può essere utilizzata inserendo il nome tra parentesi graffe: {numero printf( trovato numero\n ); 16
17 Le righe che iniziano con spazio o tabulazione sono ricopiate identiche nel file di codice C generato dall esecuzione di Lex. Lo stesso avviene per tutti i caratteri compresi tra i delimitatori %{ e %. Tutte le righe presenti nella sezione delle procedure (la terza) del programma sorgente sono ricopiate nel file C generato da Lex. Esempio Scrivere un programma LEX che dato in ingresso un programma C ne produca in uscita uno equivalente ma privo dei commenti. Si modifichi il programma dell esercizio precedente in modo che riconosca le direttive #include e, quando le incontra, segnali un errore e termini l analisi. Si tenga conto che: possono comparire degli spazi o tabulazioni, non interessa verificare la correttezza del path: è un controllo che dovrebbe essere effettuato ad un livello superiore. Le espressioni regolari descrivono sequenze di caratteri ASCII ed utilizzano un certo numero di operatori: \[]^-?.*+ ()$/{%<> Lettere e numeri del testo di ingresso sono descritti mediante se stessi: l espressione regolare val1 rappresenta la sequenza v a l 1 nel testo di ingresso I caratteri non alfabetici vengono rappresentati in Lex racchiudendoli tra doppi apici, per evitare ambiguità con gli operatori: l espressione xyz ++ rappresenta la sequenza x y z + + nel testo di ingresso I caratteri non alfabetici possono essere anche descritti facendoli precedere dal carattere \ l espressione xyz\+\+ rappresenta la sequenza x y z + + nel testo di ingresso. 17
18 Le classi di caratteri vengono descritte mediante gli operatori [] l espressione [ ] rappresenta una cifra nel testo di ingresso. Nel descrivere classi di caratteri, il segno - indica una gamma di caratteri: l espressione [0-9] rappresenta una cifra nel testo di ingresso Per includere il carattere - in una classe di caratteri, questo deve essere specificato come primo o ultimo della serie: l espressione [-+0-9] rappresenta una cifra o un segno nel testo di ingresso. Nelle descrizioni di classi di caratteri, il segno ^ posto all inizio indica una gamma di caratteri da escludere: l espressione [^0-9] rappresenta un qualunque carattere che non sia una cifra nel testo di ingresso L insieme di tutti i caratteri eccetto il fine riga (new line) viene descritto mediante il simbolo. Il carattere di fine riga viene descritto dal simbolo \n Il carattere di tabulazione viene descritto dal simbolo \t L operatore? indica l espressione precedente è opzionale: ab?c indica sia la sequenza ac che abc L operatore * indica l espressione precedente può essere ripetuta 0 o più volte: ab*c indica tutte le sequenze che iniziano per a, terminano per c e hanno all interno un numero qualsiasi di b L operatore + indica l espressione precedente può essere ripetuta 1 o più volte: ab+c indica tutte le sequenze che iniziano per a, terminano per c e hanno all interno almeno un b. 18
19 L operatore indica un alternativa tra due espressioni: ab cd indica sia la sequenza ab che la sequenza cd Le parentesi tonde consentono di esprimere la priorità tra operatori: (ab cd+)?ef indica sequenze tipo ef, abef, cdddef. Ad ogni espressione regolare è associata in Lex un azione che viene eseguita all atto del riconoscimento. Le azioni sono espresse sotto forma di codice C: se tale codice comprende più di una istruzione o occupa più di una linea deve essere racchiuso tra parentesi graffe. L azione più semplice consiste nell ignorare il testo riconosciuto: si esprime un azione nulla con il carattere ;. Il testo riconosciuto viene accumulato nella variabile yytext, definita come puntatore a caratteri. Operando su tale variabile, si possono definire azioni più complesse. Il numero di caratteri riconosciuti viene memorizzato nella variabile yyleng, definita come intero. Esiste un azione di default che viene eseguita in corrispondenza del testo non descritto da nessuna espressione regolare: il testo non riconosciuto viene ricopiato in uscita, carattere per carattere. 19
20 Esistono due tipi di ambiguità lessicali: la parte iniziale di una sequenza di caratteri riconosciuta da un espressione regolare è riconosciuta anche da una seconda espressione regolare. La stessa sequenza di caratteri è riconosciuta da due espressioni regolari distinte. Nel primo caso verrà eseguita l azione associata all espressione regolare che ha riconosciuto la sequenza più lunga. Nel secondo caso sarà eseguita l azione associata all espressione regolare dichiarata per prima nel file sorgente di lex. Dato il file %% for {return FOR_CMD; format {return FORMAT_CMD; [a-z]+ {return GENERIC_ID; e la stringa di ingresso format, la procedura yylex ritorna il valore FORMAT_CMD, preferendo la seconda regola alla prima - perché descrive una sequenza più lunga, e la seconda regola alla terza -perché definita prima nel file sorgente. 20
21 Date le regole di risoluzione dell ambiguità, è necessario definire prima le regole per le parole chiave e poi quelle per gli identificatori. Il principio di preferenza per le corrispondenze più lunghe può essere pericoloso:.* {return QUOTED_STRING; cerca di riconoscere il secondo apice il più lontano possibile: cosi, dato il seguente ingresso first quoted string here, second here riconoscerà 36 caratteri invece di 7 Una regola migliore è la seguente: [^ \n]+ {return QUOTED_STRING; Può essere necessario limitare la validità di un espressione regolare all interno di un determinato contesto. Esistono meccanismi diversi per specificare la dipendenza dal contesto destro (cioè ciò che segue la sequenza di caratteri che si sta riconoscendo) rispetto alla dipendenza dal contesto sinistro (ciò che la precede). Fa eccezione la gestione del contesto di inizio e Fine riga. Contesto di inizio e fine riga Il carattere ^ all inizio di un espressione regolare indica che la sequenza descritta deve essere posta all inizio di riga. Ciò significa che o si è posizionati all inizio del file di ingresso o che l ultimo carattere letto è stato un carattere di fine riga. Il carattere $ al termine di un espressione regolare indica che la sequenza descritta deve essere seguita da un carattere di fine riga. Tale carattere non viene incluso nella sequenza riconosciuta, deve essere riconosciuto da un altra regola. 21
22 L operatore binario / separa un espressione regolare dal suo contesto destro. Pertanto, l espressione ab/cd indica la stringa ab, ma solo se seguita da cd. I caratteri che formano il contesto destro vengono letti dal file di ingresso ma non introdotti nel testo riconosciuto. A tale scopo viene utilizzato un apposito buffer fornito da Lex. L espressione ab$ è equivalente a ab/\n. È utile poter avere diversi insiemi di regole lessicali da applicare in porzioni diverse del file di ingresso, in genere in funzione di ciò che precede, ovvero del contesto sinistro. Esistono tre approcci distinti per affrontare il problema: uso di variabili flag. uso di condizioni iniziali sulle regole o stati. uso congiunto di più analizzatori lessicali. Per esprimere la dipendenza dal contesto sinistro è possibile utilizzare variabili flag nelle azioni delle regole. Tali variabili devono essere state precedentemente dichiarate come variabili globali. La funzione REJECT può essere utilizzata per evitare corrispondenze non volute: redirige lo scanner alla seconda miglior regola che riconosce lo stesso input, oppure ad una regola che riconosca un prefisso dello stesso input. 22
23 jlex specification xxx.jlex xxx.jlex.java input program test.sim JLex.Main (java) javac P2.main (java) generated scanner xxx.jlex.java Yylex.class Output of P2.main Yylex.class 23
24 Questo software, scritto interamente in java, produce in uscita delle classi java che mplementano i metodi per effettuare l analisi lessicale di una stringa in ingresso. La classe principale che è prodotta è Yylex, la quale contiene i seguenti metodi Token yylex() che è il reale scanner. Il costruttore Yylex tprende il file che vogliamo scannerizzare (Esempio new Yylex(System.in). Token è la classe token che vogliamo restituita dallo scanner; noi possiamo dire a JLex come è fatta la classe che vogliamo restituita. String yytext() ritorna il testo riconosciuto da yylex(). Il JLex per funzionare, ha bisogno in ingresso un file di specifica, contenente tutti i dettagli relativi all analisi lessicale che si vuole realizzare. public class P2 { public static void main(string[] args) { FileReader infile = new FileReader(args[0]); Yylex scanner = new Yylex(inFile); Symbol token = scanner.next_token(); while (token.sym!= sym.eof) { switch (token.sym) { case sym.intliteral: System.out.println("INTLITERAL (" + ((IntLitTokenVal)token.value).intVal \ + ")"); break; token = scanner.next_token(); 24
25 user code %% Jlex directives %% regular expression rules Usercode: codice java scritto dall utente, che implementa le classi da questi definite, eventualmente richiamate nelle azioni compiute a seguito del riconoscimento dei tokens. Ad esempio si possono scrivere classi che gestiscono la visualizzazione dei messaggi d errore ecc. user code %% Jlex directives %% regular expression rules Jlex directives: contiene tutta una serie di direttive previste nel manuale, impostabili dall utente e danno la possibilità di personalizzare l analizzatore secondo le esigenze attuali. Consente di definire delle macro 25
26 user code %% Jlex directives %% regular expression rules regular expression rules: contiene tutte le espressioni regolari definite in precedenza nel lessico. A ciascuna può essere associata un azione da compiere, ogni volta che il token corrente è riconosciuto. Ogni azione deve essere scritta di seguito all espressione regolare e racchiusa tra parentesi graffe. Contiene classi di utilità. Pertanto, se si desidera restituire una classe IntlitToken (per i letterali integer che vengono scannerizzati), si inserice la la sua definizione nella sezione Codice Utente Le direttive JLex sono varie istruzioni che permettono possono essere date a JLex per castomizzare lo scanner generato. Le piu importanti sono: %{nella classe Yylex class (metodi e attributi extra) il codice è copiato % %eof{il codice Java è esegutio quando e raggiunta la fine del file %eof %type classname classname is the return type you want for the scanner method, yylex() 26
27 Costituisce il secondo blocco di xxx.jlex. Può anche specificare Il valore di ritorno alla fine del file Che lo scanere sarà utilizzato con il parser generator java cup. Le direttive includono le definizioni di macro: name = regular-expression Qualsiasi identificatore Java valido DIGIT= [0-9] LETTER= [a-za-z] WHITESPACE= [ \t\n] Per usare una macro, utilizzaremo il suo nome fra parentesi graffe {LETTER({LETTER {DIGIT)* %% DIGIT= [0-9] LETTER= [a-za-z] WHITESPACE= [ \t\n] // spazio,tab, newline // per renderlo compatibile con java CUP %implements java_cup.runtime.scanner %function next_token %type java_cup.runtime.symbol 27
28 regular-expression { action pattern che deve essere eseguito riconosciuto codice che deve essere quando è riconosciuto il pattern Quando il metodo next_token() viene chiamato, le seguenti azioni vengono eseguite: Trova la sequenza di caratteri più lunga nella stringa di ingresso (iniziando dal carattere corrente) che matches il pattern. Esegue le azioni associate Se diversi patterns possono corrispondere alla stessa sequenza di caratteri viene scelta la strategia longest pattern, cioè viene scelta la stringa più lunga fra quelle possibili. Se diversi patterns possono corrispondere alla stessa sequenza più lunga viene seguite la strategia first such pattern, cioè viene scelto il primo pattern che è stato definito. Pertanto l ordine di definizione dei patterns può essere importante! Se un carattere di input non matched alcun pattern viene lanciata una exception 28
29 Hanno la struttura di una espressione regolare. abc == while Stringhe di caratteri fra apici, incluso I caratteri speciali corrispondono alla stringa stessa a b matches a b not a or b a\ \ \tb matches a \tb not a <TAB>b Per costruire le espressioni regolari si usano I seguenti operatori unione * Stella di Kleen + Significa una o piu istanze? Significa zero o una o una istanza () 29
30 ^ inizio linea ^main significa che la stringa main deve comparire all inizio della linea. $ fine linea main$ significa che la stringa main deve comparire alla fine della linea. [abc] Significa a b c) [a-z] Significa qualsiasi carattere fra a e z, inclusi [^abc] Qualsiasi carattere esclusi a, b, e c. ^ ha il significato di 1 a posizione in [ ] [\t\\] Signitica tab o \ [a bc] è equivalente a a " " b c 30
31 import java_cup.runtime.*; class Token { int linenum; int colnum; Token(int line,int col){linenum=line;colnum=col;; class IntLitToken extends Token { int intvalue; IntLitToken(int val,int line,int col){ super(line,col); intvalue=val; class IdentifierToken extends Token { String identifiertext; IdentifierToken(String text,int line,int col){ super(line,col); identifiertext=text;; class CharLitToken extends Token { char charvalue; CharLitToken(char val,int line,int col){ super(line,col); charvalue=val;; class StringLitToken extends Token { String stringtext; StringLitToken(String text,int line,int col){ super(line,col); stringtext=text; ; column numbers 31
32 class Pos { static int linenum = 1; // numero della linea corrente static int colnum = 1; // numero della colonna static int line = 1; static int col = 1; static void setpos() { linenum = line; colnum = col; // numero linea dopo la scansione del token //numero colonna dopo la scansione del token %% Digit=[0-9] %type Symbol // dice cosa JLex ritorna quando viene raggiunto eof %eofval { return new Symbol(sym.EOF,new Token(0,0)); %eofval %% "+" {Pos.setpos(); Pos.col +=1; return new Symbol(sym.PLUS,new Token(Pos.linenum,Pos.colnum)); 32
33 "!=" {Pos.setpos(); Pos.col +=2; return new Symbol(sym.NOTEQ, new Token(Pos.linenum,Pos.colnum)); ";" {Pos.setpos(); Pos.col +=1; return new Symbol(sym.SEMI, new Token(Pos.linenum, Pos.colnum)); {Digit+ {// This def doesn t check // for overflow Pos.setpos(); Pos.col += yytext().length(); return new Symbol(sym.INTLIT, new IntLitToken( newinteger(yytext()).intvalue(), Pos.linenum,Pos.colnum)); \n {Pos.line +=1; Pos.col = 1; " " {Pos.col +=1; class P { public static void main(string args[]) throws java.io.ioexception { if (args.length < 1) {System.out.println("Error: manca il nome del file" ); System.exit(-1); java.io.fileinputstream yyin = null; try {yyin =new java.io.fileinputstream(args[0]); catch (FileNotFoundException notfound){ System.out.println("Error: impossibile aprire file "); System.exit(-1); Yylex lex = new Yylex(yyin); System.out.println( inizio dello scanner."); Symbol token = lex.yylex(); 33
34 while ( token.sym!= sym.eof ) { System.out.print(((Token) token.value).linenum + ":"+ ((Token)token.value).colnum + " "); switch (token.sym) { case sym.intlit: System.out.println("\tinteger literal(" +((IntLitToken)token.value).intValue + ")"); break; case sym.plus: System.out.println("\t+"); break; case sym.noteq:system.out.println("\t!="); break; default: throw new RuntimeException(); token = lex.yylex(); // get next token System.out.println("End test scanner."); 34
LEX. Espressioni regolari in Lex
LEX Poiché la trasformazione di espressioni regolari in automi a stati finiti deterministici e la implementazione di questi ultimi sono processi meccanici (e noiosi), spesso si utilizza un generatore automatico
DettagliAnalizzatore lessicale Scanner
Analizzatore lessicale Scanner Il lessico Il lessico descrive, come ricordato, le parole o elementi lessicali che compongono le frasi. Nei linguaggi artificiali gli elementi lessicali possono essere assegnati
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
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
DettagliCopyright. Esercitazioni di Linguaggi e Traduttori. Contenuti. Analisi lessicale. lex - un generatore di analizzatori lessicali
1 2 Copyright Esercitazioni di Linguaggi e Traduttori a.a. 2003/2004 Lia Morra Dipartimento di Automatica ed Informatica Tel. (011 564) 7068 E-mail: lia.morra@polito.it Copyright (c) 2000, Marco Torchiano
DettagliLEXICAL ANALYSIS LEXICAL ANALYSIS - SCANNING 30/10/2013. Symbol Table. Tokens described formally Breaks input into tokens White space.
LEXICAL ANALYSIS 1 LEXICAL ANALYSIS - SCANNING Source langua ge Scanner (lexical analysis) tokens Parser (syntax analysis) Semantic Analysis (IC generator) Code Generator 2 Code Optimizer Tokens described
DettagliAnalizzatori Lessicali con JLex. Giuseppe Morelli
Analizzatori Lessicali con JLex Giuseppe Morelli Terminologia Tre concetti sono necessari per comprendere la fase di analisi lessicale: TOKEN: rappresenta un oggetto in grado di rappresentare una specifica
DettagliCorso di Laurea Magistrale in Ingegneria Informatica A.A Linguaggi Formali e Compilatori LEX, FLEX, JLEX. Giacomo PISCITELLI
Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2011-2012 Linguaggi Formali e Compilatori LEX, FLEX, JLEX Giacomo PISCITELLI LEX/FLEX/JLEX Poiché la trasformazione di espressioni regolari in
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,
Dettagli1
POLITECNICO DI TORINO Laboratorio di Compilatori Corso di Linguaggi e Traduttori a.a 2010 / 2011 mail: stefano.scanzio@polito.it sito: Lessico () Linguaggi? Sapete qual è il colmo per un tennista? Ridere
DettagliPOLITECNICO DI TORINO. Laboratorio di Compilatori Corso di Linguaggi e Traduttori. Esercitazione 1. a.a 2010 / Linguaggi?
POLITECNICO DI TORINO Laboratorio di Compilatori Corso di Linguaggi e Traduttori mail: stefano.scanzio@polito.it sito: a.a 2010 / 2011 Linguaggi? Lessico () Sapete qual è il colmo per un tennista? Ridere
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
DettagliAnalisi Lessicale. File
Analisi Lessicale Corso di Linguaggi di Programmazione Stefano Ferilli ferilli@di.uniba.it Università degli Studi di Bari A.A. 2002/2003 File var nome: file of tipo; reset(nome) read(nome, arg,, arg) rewrite(nome)
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
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
DettagliLe basi del linguaggio Java
Corso di Laurea Ingegneria Civile Fondamenti di Informatica Dispensa 10 Le basi del linguaggio Java Aprile 2010 Le basi del linguaggio Java 1 Prerequisiti Nozioni generali sulla sintassi e semantica del
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
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
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
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
DettagliCorso di Fondamenti di Informatica Il sistema dei tipi in C++
Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Anno Accademico Francesco Tortorella Struttura di un programma C++ // Programma semplice in C++ #include int main() { cout
DettagliAlfabeto ed elementi lessicali del linguaggio C
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Alfabeto ed elementi lessicali del linguaggio C Pietro Di Lena - pietro.dilena@unibo.it s t a t i c s h o r t l e g s ; i n
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
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
DettagliOCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO
CENTRO STUDI ULISSE Via Buccino, n. 22 - C.a.p. 84018 - Scafati (SA) Tel. Fax. 081.19970299-339.2365416-349.4152010 E-mail: info@centrostudiulisse.it - www.centrostudiulisse.it OCA JAVA 7 SE PROGRAMMER
DettagliL utility Unix awk [Aho-Weinberger-Kernighan]
L utility Unix awk [Aho-Weinberger-Kernighan] L utility awk serve per processare file di testo secondo un programma specificato dall utente. L utility awk legge riga per riga i file ed esegue una o più
DettagliIntroduzione alla programmazione
Introduzione alla programmazione Risolvere un problema Per risolvere un problema si procede innanzitutto all individuazione Delle informazioni, dei dati noti Dei risultati desiderati Il secondo passo consiste
DettagliLinguaggio C: introduzione
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: introduzione La presente dispensa e da utilizzarsi
DettagliLe basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
DettagliLinguistica Computazionale
Linguistica Computazionale Laboratorio espressioni regolari (1) 30 settembre 2014 Cercare, ricercare Cercare una parola in un testo è semplice: ma come fare per ricerche più complesse? le parole che terminano
DettagliProgetto Automi e Linguaggi Parser svliluppato con JLex e cup
Progetto Automi e Linguaggi Parser svliluppato con JLex e cup Sviluppato da Santoro Carlo Maurizio Matricola:0108/528 Sviluppo terminato il: 18/06/06 TRACCIA DEL PROGETTO Si costruisca, utilizzando la
DettagliLezione 6 Introduzione al C++ Mauro Piccolo
Lezione 6 Introduzione al C++ Mauro Piccolo piccolo@di.unito.it Linguaggi di programmazione Un linguaggio formale disegnato per descrivere la computazione Linguaggi ad alto livello C, C++, Pascal, Java,
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
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
DettagliGESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
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
DettagliProgrammazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi
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
DettagliCorso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a
Dott.ssa Maria Carmela De Bonis a.a. 2013-14 Programmi Un elaboratore riceve dei dati in ingresso, li elabora secondo una sequenza predefinita di operazioni e infine restituisce il risultato sotto forma
DettagliFondamenti di Informatica 6. Algoritmi e pseudocodifica
Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
DettagliCorso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni
DettagliUnità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi
Obiettivi Unità F1 Primi programmi Conoscere il significato di dichiarazione e definizione di variabili Conoscere i tipi di dato numerici Essere in grado di realizzare semplici algoritmi in pseudolinguaggio
DettagliProgrammazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli
DettagliFile binari e file di testo
I file File binari e file di testo distinzione tra file binari file di testo si possono usare funzioni diverse per la gestione di tipi di file diversi Programmazione Gestione dei file 2 File binari e file
DettagliCorso di Fondamenti di Informatica Linguaggi di Programmazione
di Cassino e del Lazio Meridionale Corso di Informatica Linguaggi di Programmazione Anno Accademico 2014/2015 Francesco Tortorella Linguaggi di programmazione Un calcolatore basato sul modello di von Neumann
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
Dettagli19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso
DettagliProgrammazione web lato client con JavaScript. Marco Camurri 1
Programmazione web lato client con JavaScript Marco Camurri 1 JavaScript E' un LINGUAGGIO DI PROGRAMMAZIONE che consente di inserire codice in una pagina web Sintassi simile a Java (e al C), ma NON E'
DettagliIntroduzione Programmazione Java
Introduzione Programmazione Java Paolo Tomeo paolo.tomeo@poliba.it Regole basilari Java è case sensitive quindi prestare attenzione alle maiuscole Il commento si inserisce con // all'inizio della linea
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
DettagliUn esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore)
Un esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore) Macchina astratta: un linguaggio di programmazione trasforma un calcolatore in una macchina
DettagliIL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input
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
DettagliCaratteri e stringhe
Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un
DettagliLa sintassi del C APPENDICE H
APPENDICE H La sintassi del C Nella notazione della sintassi utilizzata, le categorie sintattiche (non terminali) sono state indicate da uno stile tipografico in corsivo, mentre le parole letterali e i
DettagliIntroduzione a Java. Riferimenti
Introduzione a Java Si ringraziano Massimiliano Curcio e Matteo Giacalone 1: Introduction 1 Riferimenti! Java tutorial: http://java.sun.com/docs/books/tutorial/! Il Java tutorial è parte di una più ampia
DettagliRappresentazione con i diagrammi di flusso (Flow - chart)
Rappresentazione con i diagrammi di flusso (Flow - chart) Questo tipo di rappresentazione grafica degli algoritmi, sviluppato negli anni 50, utilizza una serie di simboli grafici dal contenuto evocativo
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
DettagliProgrammazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo
Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy
Dettagli7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
DettagliI CARATTERI E LE STRINGHE
I CARATTERI E LE STRINGHE IL CODICE ASCII Per memorizzare i simboli grafici corrispondenti ai caratteri bisogna associare un numero intero a ciascuno di essi Il codice ASCII / æski/ (American Standard
DettagliModulo 2: Strutture fondamentali della programmazione Java
Modulo 2: Strutture fondamentali della programmazione Java Argomenti Trattati: Un semplice programma Java: Presentazione di un primo Esempio; Introduzione alla struttura; Compilazione ed esecuzione. Argomenti
DettagliLaboratorio di Programmazione Lezione 2. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]
DettagliEspressioni. Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica!
Espressioni Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica! Valutazione automatica di expr aritmetiche = obiettivo primario dei primi LP
DettagliINTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione
DettagliProgrammazione con il linguaggio LibreOffice Basic
Programmazione con il linguaggio LibreOffice Basic L ambiente di programmazione Il software LibreOffice possiede un ambiente di programmazione in linguaggio Basic, che consente di creare procedure software
DettagliIstruzioni di ripetizione in Java 1
in Java Corso di laurea in Informatica Le istruzioni di ripetizione consentono di eseguire molte volte la stessa Si chiamano anche cicli Come le istruzioni condizionali, i cicli sono controllati da espressioni
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
Dettagli6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
6 - Blocchi e cicli Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it
DettagliLESSICO E SINTASSI DEL PASCAL
LESSICO E SINTASSI DEL PASCAL Il linguaggio di programmazione Pascal è potente e semplice nello stesso tempo; ciò ne giustifica la scelta, inoltre i nuovi compilatori del linguaggio pascal permettono di
DettagliGESTIONE DEGLI ERRORI
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori L approccio classico consiste nell inserire controlli (if else..) per cercare di intercettare a priori
DettagliVBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.
Excel VBA VBA Visual Basic for Application VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole. 2 Prima di iniziare. Che cos è una variabile?
DettagliIntroduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software
Introduzione alla programmazione Algoritmi e diagrammi di flusso F. Corno, A. Lioy, M. Rebaudengo Sviluppo del software problema idea (soluzione) algoritmo (soluzione formale) programma (traduzione dell
DettagliAnalisi lessicale. Scopi Tecniche Strumenti - Lex. Introduzione ai compilatori - UNINA 1
Analisi lessicale Scopi Tecniche Strumenti - Lex Introduzione ai compilatori - UNINA 1 L analizzatore lessicale nel compilatore Linguaggio sorgente Analizzatore lessicale token Next token Analizzatore
DettagliProgrammazione a oggetti
Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi piluc@dsi.unifi.it Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software
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,/}
DettagliIntroduzione alla programmazione. Walter Didimo
Introduzione alla programmazione Walter Didimo Programmi Un programma è una frase (anche molto lunga) che descrive delle azioni che devono essere svolte da un calcolatore La frase deve essere dettagliata
DettagliCorso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA6 A1 I file testo 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Modello produttore consumatore Operazioni logiche su struttura file 2 1 Introduzione
DettagliIl linguaggio di programmazione Python
Università Roma Tre Dipartimento di Matematica e Fisica Percorso Abilitante Speciale Classe A048 Matematica Applicata Corso di Informatica Il linguaggio di programmazione Python Marco Liverani (liverani@mat.uniroma3.it)
DettagliGestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico
Gestione dei file Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2016 2017 Gli stream Si dice stream qualsiasi sorgente di dati in ingresso e qualsiasi
DettagliCorso di Fondamenti di Informatica
Corso di Fondamenti di Informatica Le classi di istruzioni in C++ 1 Le classi di istruzioni in C++ SEQUENZIALI Statement semplice Statement composto CONDIZIONALI if < expr.> else switch case
DettagliCostanti e Variabili
Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli
DettagliProgrammazione ad Oggetti. Java Parte II
Programmazione ad Oggetti Java Parte II Overview Caratteristiche lessicali Il primo programma Java 1 Commenti /* Commento tradizionale, eventualmente su più linee, non nidificato */ // Commento su di una
DettagliRiassunto. I mattoni di base di un programma Java. Oggi. Un programma complicato. Oggi. Perché è complicato? Stefano Mizzaro 1.
I mattoni di base di un programma Java Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione, lezione 2 28 settembre
DettagliProva d Esame Compito A
Domanda 1 A) Si richiede di analizzare le seguenti sezioni di codice. Il candidato indichi il risultato dell esecuzione del main. public class Father { private static int counter=0; private int code; public
DettagliDefinizione di metodi in Java
Definizione di metodi in Java Un metodo in Java definisce un operazione ad alto livello (sottoprogramma) che consente di manipolare dati e oggetti. Durante la computazione effettuata da un programma, un
DettagliDescrizione delle operazioni di calcolo. Espressioni costanti semplici
Descrizione delle operazioni di calcolo Come abbiamo detto l interprete è in grado di generare nuovi valori a partire da valori precedentemente acquisiti o generati. Il linguaggio di programmazione permette
DettagliLA CODIFICA DELLE INFORMAZIONI
LA CODIFICA DELLE INFORMAZIONI Linguaggio Elaborazione delle informazioni: operazioni che possono essere effettuate sulle informazioni: inserimento, archiviazione, modifica, ordinamento, calcolo, ecc.
DettagliTipi di dato semplici
Tipi di dato semplici Perché dichiarare una variabile? 2 Una variabile rappresenta uno spazio di memoria centrale Prima dell esecuzione del programma deve essere chiaro quanto spazio serve al programma
DettagliEccezioni Precisazioni e approfondimenti
Eccezioni Precisazioni e approfondimenti Costruttore: il parametro String definisce il messaggio di errore associato all eccezione Metodi particolarmente significativi getmessage(): ritorna l istanza di
DettagliModularizzazione del software
Modularizzazione del software Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2006/2007 Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica
DettagliLezione 6 programmazione in Java
Lezione 6 programmazione in Java Nicola Drago drago@sci.univr.it Dipartimento di Informatica Università di Verona Anteprima Le costanti I vettori Cos è un vettore Come si usa I vari tipi di vettori Esempi
DettagliSTRUTTURE DI CONTROLLO DEL C++
STRUTTURE DI CONTROLLO DEL C++ Le istruzioni if e else Le istruzioni condizionali ci consentono di far eseguire in modo selettivo una singola riga di codice o una serie di righe di codice (che viene detto
DettagliESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
DettagliJavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132
JavaScript Core Language Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132 Condizioni L utilizzo di operatori relazionali e logici consente di formulare delle condizioni
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
DettagliInformatica Generale Andrea Corradini Ancora sui linguaggi di programmazione
Informatica Generale Andrea Corradini 18 - Ancora sui linguaggi di programmazione Sommario Principali componenti di un linguaggio di programmazione Variabili e costanti Strutture dati: array e record Strutture
DettagliStrutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05
Strutture dati Il che cosa e il come Il che cosa ed il come Struttura dati: descrive come sono organizzati i dati e come sono realizzate le operazioni su di essi (cioe come si accede ai dati) Specifica
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
Dettagli