Scarica esercizi linguaggio Haskell e più Esercizi in PDF di Tecniche E Linguaggi Di Programmazione solo su Docsity!
Specificare la definizione regolare relativa ai simboli lessicali intconst (costante intera) e id (identificatore), sulla base dei seguenti vincoli:
- Una costante intera con più di una cifra non può iniziare con uno zero;
- Una costante intera diversa da zero è opzionalmente qualificata da un segno (parte integrante della costante);
- Un identificatore inizia con un carattere alfabetico ed è seguito da una sequenza (anche vuota) di caratteri alfanumerici, eventualmente separati da caratteri underscore ' _ ';
- In un identificatore, non sono ammesse sequenze di due o più underscore consecutivi e l’underscore non può terminare l’identificatore.
Specificare la definizione regolare relativa ai simboli lessicali intconst (costante intera) e id (identificatore), sulla base dei seguenti vincoli:
- Una costante intera con più di una cifra non può iniziare con uno zero;
- Una costante intera diversa da zero è opzionalmente qualificata da un segno (parte integrante della costante);
- Un identificatore inizia con un carattere alfabetico ed è seguito da una sequenza (anche vuota) di caratteri alfanumerici, eventualmente separati da caratteri underscore ' _ ';
- In un identificatore, non sono ammesse sequenze di due o più underscore consecutivi e l’underscore non può terminare l’identificatore. Linguaggi di Programmazione Esercizi Lessico lettera ® [A-Za-z] cifra ® [0-9] alfanum ® lettera | cifra cifra-iniziale ® [1-9] segno ® + | - intconst ® segno? (cifra-iniziale cifra
) | 0 id ® lettera alfanum
( _ alfanum
)
2
Specificare la definizione regolare relativa ai simboli lessicali realconst (costante reale) e id (identificatore), sulla base dei seguenti vincoli:
- Una costante reale si compone di una parte intera (obbligatoria) ed una parte decimale (opzionale);
- La parte intera è separata dalla parte decimale (se espressa) da un punto;
- Una costante reale include il segno '-' se negativa (ma non il segno '+', se positiva);
- La parte intera con più di una cifra non può iniziare con uno zero;
- Un identificatore inizia con un carattere alfabetico ed è seguito da una sequenza (anche vuota) di caratteri alfanumerici;
- Un identificatore non può essere più lungo di quattro caratteri. Linguaggi di Programmazione Esercizi Lessico lettera ® [A-Za-z] cifra ® [0-9] alfanum ® lettera | cifra cifra-iniziale ® [1-9] segno ® '-' intero ® cifra-iniziale cifra
| 0 decimale ® cifra
realconst ® segno? intero ('.' decimale)? id ® lettera alfanum? alfanum? alfanum? 4
Specificare la definizione regolare relativa al simbolo lessicale indirizzo , che rappresenta l'indirizzo civico di una persona, come nei seguenti esempi: L'indirizzo deve rispettare i seguenti vincoli lessicali:
- La prima riga specifica il nome (in generale, uno o più nomi) e il cognome (uno solo) della persona;
- La seconda riga specifica la via (unico nome preceduto dalla keyword Via) e il numero civico;
- La terza riga specifica il CAP e la città (eventualmente composta da più nomi);
- Ogni elemento sulla stessa riga è separato dal successivo mediante un blank ;
- Ogni riga è separata dalla successiva mediante un newline ;
- Ogni identificatore (nome, cognome, indirizzo, città) inizia con una maiuscola ed è seguito da una o più minuscole;
- Un nome (o più) della persona può essere abbreviato dal primo carattere seguito dal punto;
- Il numero civico è composto da non più di 3 cifre e non può iniziare con una sequenza di zeri;
- Il CAP è composto da cinque cifre. Linguaggi di Programmazione Esercizi Lessico Angelo B. Rossi Via Europa 145 25100 Brescia Angelo B. Matteo Rossi Via Africa 12 27100 Pavia T. Bianchi Via Asia 2 64123 Bastia Franca 5
Specificare la definizione regolare relativa ad una tabella (non vuota), in cui ogni riga rappresenta nome, cognome e codice fiscale di una persona, come nel seguente esempio, sulla base dei seguenti vincoli lessicali:
- Nome e cognome iniziano con una lettera maiuscola, seguita da una o più lettere minuscole;
- Il codice fiscale, composto da lettere maiuscole e cifre, è suddiviso in quattro parti: tre lettere per il cognome, tre lettere per il nome, la data di nascita (due cifre per l'anno, una lettera per il mese, giorno del mese compreso tra 01 e 31) ed una stringa alfanumerica di cui il primo carattere e l'ultimo sono lettere mentre i tre caratteri intermedi sono cifre;
- Nome e cognome sono seguiti da uno spazio;
- Ogni riga, ad eccezione dell'ultima, è seguita da un newline. Luigi Rossi ROSLGI84L14M634U Anna Bianchi BCIANN92A07H584X Enrico Verdi VRDERC67M13S124Y
Specificare la definizione regolare relativa ad una tabella (non vuota), in cui ogni riga rappresenta nome, cognome e codice fiscale di una persona, come nel seguente esempio: maiuscola ® [A-Z] minuscola ® [a-z] cifra ® [0-9] spazio ® ' ' newline ® '\n' id ® maiuscola minuscola
anno ® cifra cifra mese ® maiuscola giorno ® 0 [1-9] | [1-2] [0-9] | 3 [0-1] cf ® maiuscola maiuscola maiuscola maiuscola maiuscola maiuscola anno mese giorno maiuscola cifra cifra cifra maiuscola persona ® id spazio id spazio cf tabella ® persona (newline persona)* Luigi Rossi ROSLGI84L14M634U Anna Bianchi BCIANN92A07H584X Enrico Verdi VRDERC67M13S124Y
Specificare la definizione regolare relativa ad una lista (anche vuota) di elementi, in cui ogni elemento è un identificatore o un numero, come nel seguente esempio, sulla base dei seguenti vincoli lessicali:
- Un identificatore inizia con una lettera ed è seguito da almeno due caratteri alfanumerici.
- Un numero è composto da una parte intera (una o più cifre) ed opzionalmente da una parte decimale (un punto seguito da due cifre); la parte intera con più di una cifra non può iniziare con uno zero; un numero può avere un segno negativo (ma non positivo).
- Gli elementi della lista sono separati tra loro da una virgola e da uno spazio. [a2b, 25, 0, AAzxy, 0.12, 13.00, stella, 100, S289aa, 123.65, zeta] lettera ® [a-zA-Z] nonzero ® [1-9] cifra ® 0 | nonzero spazio ® ' ' punto ® '.' alfanum ® lettera | cifra id ® lettera alfanum alfanum alfanum* intero ® 0 | nonzero cifra* num ® -? intero (punto cifra cifra)? elem ® id | num lista ® [ (elem (, spazio elem)*)? ]
Specificare la definizione regolare relativa ad una lista (anche vuota) di tuple, in cui ogni elemento di una tupla può essere una stringa, un numero intero, un numero reale o una costante booleana, come nel seguente esempio, sulla base dei seguenti vincoli lessicali:
- Ogni tupla (racchiusa tra parentesi) contiene almeno due elementi, separati tra loro da una virgola.
- Le tuple non hanno separatori tra loro.
- Una stringa (anche vuota) è delimitata da due doppi apici e può contenere caratteri alfanumerici, spazi e doppi apici (per evitare ambiguità, questi ultimi devono essere preceduti dal backslash).
- Un numero intero diverso da zero non può iniziare con la cifra 0.
- Un numero reale ha una parte intera ed una parte decimale, separate da un punto.
- La parte intera diversa da zero di un numero reale non può iniziare con la cifra 0.
- I numeri possono essere preceduti dal segno. [("alfa",+10,12.34,true)(""beta"",false)("Gamma 25",0.12,false)]
Specificare la definizione regolare relativa ad un insieme (anche vuoto) di identificatori, come nel seguente esempio, sulla base dei seguenti vincoli lessicali:
- ogni identificatore è separato dal successivo da una virgola seguita da uno spazio;
- un identificatore inizia con una lettera maiuscola ed è seguito da zero o più caratteri alfanumerici;
- un identificatore può includere caratteri underscore;
- un underscore non può seguire un altro underscore e nemmeno essere l'ultimo carattere dell'identificatore. {Alfa, Beta22, Gamma_1_delta, Luna_Sole_stelle, Xilofono_1_2_345_omega}
Specificare la definizione regolare relativa ad un insieme (anche vuoto) di identificatori, come nel seguente esempio, sulla base dei seguenti vincoli lessicali:
- ogni identificatore è separato dal successivo da una virgola seguita da uno spazio;
- un identificatore inizia con una lettera maiuscola ed è seguito da zero o più caratteri alfanumerici;
- un identificatore può includere caratteri underscore;
- un underscore non può seguire un altro underscore e nemmeno essere l'ultimo carattere dell'identificatore. {Alfa, Beta22, Gamma_1_delta, Luna_Sole_stelle, Xilofono_1_2_345_omega} maiuscola ® [A-Z] minuscola ® [a-z] lettera ® maiuscola | minuscola cifra ® [0-9] underscore ® '_' spazio ® ' ' alfanum ® lettera | cifra id ® maiuscola ((underscore? alfanum) + )* insieme ® '{' (id (, spazio id)*)? '}'
Specificare la definizione regolare relativa ad una lista (anche vuota) di record composti da tre elementi: una parola, un numero (senza segno) ed un insieme (anche vuoto, eventualmente disomogeneo) di parole o numeri: [(sole,10,{}),(12_beta, 0.12,{0,12.35,21}),(Gamma_1_2_tre,128.09,{luna,2_stelle})] lettera ® [a-zA-Z] nonzero ® [ 1 - 9 ] cifra ® 0 | nonzero underscore ® '_' punto ® '.' alfanum ® lettera | cifra parola ® alfanum+^ (underscore alfanum+)* intera ® 0 | (nonzero cifra) decimale ® cifra+ numero ® intera (punto decimale)? atomo ® parola | numero insieme ® { (atomo ( , atomo))? } record ® '(' parola, numero, insieme ')' lista ® '[' (record ( , record)*)? ']'
Specificare la definizione regolare relativa ad una lista (anche vuota) di numeri complessi, come nel seguente esempio: sulla base dei seguenti vincoli lessicali:
- Un numero complesso è rappresentato da una coppia (parte reale, parte immaginaria);
- Ognuna delle due parti è rappresentata da un numero, eventualmente con segno, avente una parte intera, opzionalmente una parte decimale (almeno una cifra) e, infine, opzionalmente una parte esponenziale (rappresentata da E seguita da un intero, eventualmente con segno);
- La parte intera non contiene zeri non significativi;
- Il linguaggio è libero dal formato: ogni elemento lessicale (numero, parentesi, virgola) può essere separato dagli altri mediante spazi bianchi e/o tab e/o newline.
[ (1, 24.66),(0.12, +3) ( 1.845, 1.23E20 ) , (33E4, 26.80E3) ]
Specificare la definizione regolare relativa ai seguenti simboli lessicali di un linguaggio di programmazione:
- Identificatore : stringa alfanumerica, di lunghezza compresa tra due e quattro caratteri, che inizia con una lettera e termina con una cifra;
- Costante intera : sequenza di cifre priva di zeri non significativi;
- Costante stringa (anche vuota): racchiusa tra doppi apici e contenente qualsiasi carattere diverso da doppi apici e newline;
- Costante booleana : true o false ;
- Commento : stringa di caratteri che inizia con # e termina con newline.
Specificare la definizione regolare relativa ai seguenti simboli lessicali di un linguaggio di programmazione:
- Identificatore : stringa alfanumerica, di lunghezza compresa tra due e quattro caratteri, che inizia con una lettera e termina con una cifra;
- Costante intera : sequenza di cifre priva di zeri non significativi;
- Costante stringa (anche vuota): racchiusa tra doppi apici e contenente qualsiasi carattere diverso da doppi apici e newline;
- Costante booleana : true o false ;
- Commento : stringa di caratteri che inizia con # e termina con newline. lettera ® [A-Za-z] minuscola ® [a-z] nonzero ® [1-9] cifra ® 0 | nonzero alfanum ® lettera | cifra newline ® '\n' id ® lettera alfanum? alfanum? cifra intconst ® nonzero cifra* | 0 strconst ® "(~[\n"])" boolconst ® true | false commento ® #(~\n)\n