Definizione ed Implementazione della rappresentazione interna delle espressioni del linguaggio PERLA di Stefano Vettor.

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

Introduzione ad XML Mario Arrigoni Neri.
Recupero debito quarto anno Primo incontro
Estendere i linguaggi: i tipi di dato astratti
Informatica Recupero debito quarto anno Terzo incontro.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità C1 Il linguaggio SQL.
PHP.
Analizzatori Lessicali con JLex
Universita di Camerino
Java: programmazione concorrente con condivisione di memoria
Massa Laura Mela Enrica
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Le gerarchie di tipi.
Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.
Semantica Operazionale di un frammento di Java: lo stato
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Introduzione al linguaggio C++ 5 lezioni
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Introduzione al linguaggio Java
Basi di Dati II Sara Romano
Perché.Net e non più COM/DCOM ? Superamento dei problemi di COM: Richiede una infrastruttura "non semplice" da ogni applicazione (ad esempio Class Factory.
Approfondimento delle classi
mosaic manipola oggetti primitivi (ruota e unisci) regole:
Elaborazione di Franco Grivet Chin
Meteo Service Corso di Reti di Calcolatori LS Casarini Stefano matr
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
ANTLR V.3 Renzi Alberto.
Ereditarietà e Polimorfismo
CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A /02/2008 Alessandra Toninelli
Un esempio: Calcolo della potenza n-esima di un numero reale
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Sintassi base e struttura di un programma
BIOINFO3 - Lezione 331 SUBROUTINE IN PERL Una subroutine (funzione, metodo, procedura o sottoprogramma), e` una prozione di codice all`interno di un programma.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
1 Applet ed HTML Fondamenti di Informatica Corso D.
Attività progettuale in Linguaggi e Modelli Computazionali M
I nomi in Java F. Bombi 18 novembre novembre 2003.
INTRODUZIONE A JAVASCRIPT
Alberi CORDA – Informatica A. Ferrari Testi da
1 novembre I nomi in Java F. Bombi 1 novembre 2002.
Introduzione a Javascript
Tecnologie di InternetDocument Type Definition Dott. Nicola Dragoni Document Type Definition  Document Type Definition (DTD)  Documento XML valido 
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Laboratorio di Servizi Web - XML - Ardissono 1 Rappresentazione ad oggetti di documenti XML Parser fanno analisi sintattica di documento XML ma, a meno.
Ese 1 (del 31 Marzo 2004). Il compilatore Non esegue il programma, non guarda i valori che possono assumere di volta in volta le variabili, non fa assunzioni.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
1 Un esempio con iteratore: le liste ordinate di interi.
Corso integrato di Matematica, Informatica e Statistica Informatica di base Linea 1 Daniela Besozzi Dipartimento di Informatica e Comunicazione Università.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
XVRC2 Emanuele Ruffaldi Giugno Tre esperimenti con S3D ► Estensioni del Linguaggio ► Pre-Compilatore ► Esecuzione dentro il Java L C J.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
SQLite. Introduzione a SQLite Oltre alla possibilità di memorizzare informazioni persistenti attraverso Preferences e files, Android mette a disposizione.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Transcript della presentazione:

Definizione ed Implementazione della rappresentazione interna delle espressioni del linguaggio PERLA di Stefano Vettor

Cosè PERLA PERLA (PERvasive LAnguage) è un linguaggio completamente dichiarativo che permette allutente di interrogare un sistema pervasivo in modo simile a come si interrogherebbe una base di dati utilizzando SQL. Un sistema pervasivo è una grande rete eterogenea composta da diversi dispositivi, ognuno dei quali può utilizzare diverse tecnologie, come ad esempio reti di sensori wireless (WSN), sistemi RFID, GPS e molti altri tipi di sensori. PERLA nasce come progetto del Politecnico di Milano (cominciato come tesi di Laurea specialistica di Marco Marelli e Marco Fortunato) con l'obiettivo di consentire linterrogazione di un sistema pervasivo utilizzando una sintassi simile a quella dellSQL standard. PERLA è nato in seno al progetto ART DECO (Adaptive InfRasTructures for DECentralized Organizations). Il progetto, finanziato dal Ministero dellUniversità e della Ricerca, mira allo sviluppo di tecniche e strumenti per favorire la diffusione delle networked enterprise tra le piccole e medie imprese italiane.

Obiettivi del progetto Definizione dei tipi base di costanti e delle relative classi Definizione delle operazioni tra e sulle costanti Costruzione e valutazione delle espressioni Gestione dei tipi delle costanti a runtime Creazione di un sistema che permetta laggiunta di tipi di costanti definite dagli utenti

Elementi Chiave Le classi delle costanti con i relativi metodi per le operazioni ed il controllo di tipo. I nodi delle espressioni che ne permettono la valutazione a runtime.

Costanti Superclasse Astratta Constant da cui derivano tutte le altre costanti Classe ConstantBuilt-in da cui derivano poi tutti i tipi di default di PERLA (i tipi dellSQL) Classe ConstantUserDefined che permette agli utenti di implementare dei propri tipi scrivendo unicamente una classe che deriva da questa

Costanti Tutte le costanti derivano dalla superclasse astratta Constant Constant definisce tutti i metodi delle costanti, le sottoclassi che li implementeranno dovranno ridefinirli tramite overload Le costanti stesse si occupano della gestione delle operazioni e del controllo sui tipi In caso di errori nella creazione, nel cast o nelle operazioni sulle costanti vengono generate delle eccezioni appositamente definite.

Creazione delle costanti Tutte le classi derivate da Constant possono essere inizializzate o tramite un oggetto del loro tipo (o del tipo java), oppure tramite unapposita stringa. Esiste anche una classe, ConstantFactory, che si occupa della gestione della creazione delle costanti da stringa.

Costanti: operazioni e tipi Per ogni operazione esiste un metodo che la realizza Ogni operazione ritornerò un nuovo oggetto Constant con il risultato delloperazione oggettoConstant.operazione(altroOggetoConstant) oggettoRisultatoConstant Tramite appositi metodi statici è possibile conoscere il tipo ritornato da una determinata operazione senza dovr però calcolare il risultato classeConstant.operazioneTipoRit(altraclasseConstant) classeRisultatoConstant

Costanti User Defined Sono costanti che possono essere aggiunte dallutente solamente creandone la classe Java e senza dover andare a modificare nulla allinterno di PERLA. Ci sarà a runtime un oggetto apposito che permetterà di caricarle e di sapere quali costanti user defined sono state caricate. Tutte le classi derivate da ConstantUserDefined devono implementare, per ogni operazione supportata, loperazione inversa sicché le costanti Built-in possano eseguire operazioni con le User Defined (non note a priori) delegando loro il compito di calcolare il risultato. oggettoConstant.operazione(altroOggetoConstant) altroOggettoConstant.operazioneInverse(this)

Controllo di tipo delle costanti Il controllo del tipo ritornato da unoperazione può essere ottenuto senza doverne effettivamente calcolare il risultato. Dei metodi statici sono stati appositamente creati. ConstantClass.operazioneResultType(altraConstantClass) ResultConstantClass Per calcolare il tipo ritornato da operazioni coinvolgenti costanti user defined usiamo la reflection per accedere a metodi di classi non note in fase di scrittura del codice.

Struttura delle espressioni Le espressioni hanno una struttura ad albero. Tutti gli elementi dellalbero sono composti da classi che estendono Node che è la superclasse astratta dei nodi. Cè una sottoclasse per ogni tipo di operazione (es. NodeAddition) Ogni NodeOperation ha come variabili altri nodi (uno, 2 o 3... a seconda del tipo di operazione). I nodi intermedi dellalbero (radice inclusa) estendono o NodeOperation o NodeAggregation o NodeFuntion mentre le foglie estendono quasi sempre NodeConstant (3+5)*(4-2)

Nodi

Per ottenere il risultato di una espressione basta richiamare il metodo getResult() del nodo radice dellespressione. Verranno così richiamati ricorsivamente i getResult() di tutti i sotto-alberi portando verso lalto il risultato finale che sarà un oggetto Constant. Per sapere se lespressione possa essere valutata senza errori (senza dover calcolare effettivamente il risultato) cè il metodo isTypeValid() che ritorna TRUE in caso di tipo di ritorno valido. Per sapere il tipo della Constant ritornato dalla espressione (senza dover calcolare effettivamente il risultato) cè il metodo getResultType() che richiama i getResultType() dei sottoalberi ricorsivamente ritornando il tipo del risltato dellespressione.

NodeConstant I nodi costante si trovano unicamente come foglie dellalbero dellespressione Hanno come variabile un unico oggetto Constant

NodeOperation Come variabili hanno generalmente 2 nodi ma possono averne anche solo 1 o 3 a seconda delloperazione. Esiste una sottoclasse di NodeOperation per ogni operazione (NodeAddition ad esempio invocherà il metodo addition della Constant risultata dal getResult() del primo nodo passando come argomento il getResult() del secondo)

NodeFunction Le funzioni vengono implementate dallutente estendendo la classe function La function viene dichiarata in un apposito file XML che viene caricato nel FunctionRepository che crea lindice delle funzioni disponibili. un NodeFunction contiene come variabile un oggetto Function <functions><function><name>Funzione 1</name><parameter> <parName>Par1</parName> <parType>org.dei.perla.parser.expressions.ConstantVectorInteger</parType></parameter> <returnedType>org.dei.perla.parser.expressions.ConstantVectorInteger</returnedType></function></functions>