Implementazione di un motore per la colorazione della sintassi in GtkSourceView Relatore: Riccardo Sisto Candidati: Emanuele Aina Marco Barisione.

Slides:



Advertisements
Presentazioni simili
CGI in Python & WebWare Marco Barisione. 2 CGI CGI = Common Gateway Interface È un modello di comunicazione fra browser e server I programmi CGI sono.
Advertisements

Active Server Pages ed ADO. Scrivere ASP Le pagine ASP possono contenere codice HTML o XML Le parti del documento che racchiudono codice script vanno.
Uso avanzato di C.
JavaScript 2. JavaScript nelle pagine web. HTML e XHTML Gli script JavaScript sono utilizzabili sia in pagine HTML che XHTML XHTML impone che il codice.
Marco Barisione Estendere Python in C.
BAnMaT:un framework per l’analisi e la manipolazione di bitstream orientato alla riconfigurabilità parziale Relatore: Prof. Fabrizio FERRANDI.
Motore di news per portali Web: progetto ed implementazione Relatore: Chiar.mo Prof. Sonia Bergamaschi Tesi di Laurea di: Roberto Delfini Anno Accademico.
Il mio nome è Alain Fergnani e nel corso della tesi mi sono occupato della dinamica delle ontologie per il Web Semantico, e in particolare dell’approccio.
Analisi e Contromisure di tecniche di Sql Injection
UNIVERSITA’ DEGLI STUDI DI MODENA E REGGIO EMILIA
COMPARAZIONE DI STRUMENTI SOFTWARE PER LA CREAZIONE, LA GESTIONE E LINTEGRAZIONE DI ONTOLOGIE Università degli Studi Modena e Reggio Emilia Facoltà di.
L’AUTONOMIA POSSIBILE NELLA DISABILITÀ MOTORIA GRAVE
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
JavaScript Laboratorio di Applicazioni Informatiche II mod. A.
FMZ, Giugno 2001 Parsing del linguaggio naturale Fabio Massimo Zanzotto Università di Tor Vergata.
Informatica B Allievi Elettrici AA La progettazione per raffinamenti successivi.
XHTML Danilo Deana. XHTML2 XHTML (eXtensible HyperText Markup Language) XHTML è una riformulazione di HTML come applicazione XML. Utilizzando XHTML è
Componenti di un documento HTML Danilo Deana. Componenti di un documento HTML 2 Elementi HTML comprende elementi per rappresentare paragrafi, elenchi,
Laboratorio di Linguaggi note sull'uso dell' IDE DevC++ Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione IX: Dentro le Librerie Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) JAVA: i commenti Anno Accademico 2009/2010.
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
Argomenti Direttive di Preprocessore: Compilazione Condizionale
AICA Corso IT Administrator: modulo 4 AICA © EUCIP IT Administrator Modulo 4 - Uso Esperto della Rete Introduzione sulla sicurezza.
Dichiarazioni e tipi predefiniti nel linguaggio C
Università degli studi di Udine facoltà di Scienze M.F.N. SVILUPPO FUNZIONALITA' GIS SU PORTALE ZOPE Relatore: Prof. Claudio Mirolo Laureando: Marco Celotti.
Javascript Javascript è il linguaggio di scripting più diffuso sul Web
Javascript 5 Selezione. Listruzione IF (in italiano SE) pone una scelta, ossia 'se vero' esegui in un modo oppure 'se falso' esegui in un altro modo.
JavaScript 1. Origine E uno dei primi linguaggi di scripting per il web sviluppato da Netscape nel 1995 E interpretato Ha alcune similarità sintattiche.
Javascript: fondamenti, concetti, modello a oggetti
CampusBlog - Campuswin Sistema Informativo di Ateneo CampusBlog.
UNIVERSITÀ DEGLI STUDI DI BARI
Gli attrezzi del programmatore Prof. Francesco Procida Si spieghi con un esempio 2.
UNIVERSITÀ DEGLI STUDI DI MODENA E REGGIO EMILIA Facoltà di Ingegneria “Enzo Ferrari” – Sede di Modena Corso di Laurea Specialistica in Ingegneria Informatica.
Interazione di JavaScript e HTML
Servizi Grid ed agenti mobili : un ambiente di sviluppo e delivering
Laboratorio di Linguaggi lezione VII: variabili Globali e Locali Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali.
Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.
Il World Wide Web Lidea innovativa del WWW è che esso combina tre importanti e ben definite tecnologie informatiche: Documenti di tipo Ipertesto. Sono.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Corso di Programmazione Grafica e Laboratorio Daniele Marini
INTRODUZIONE A JAVASCRIPT
PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose.
Form o moduli HTML Esistono degli oggetti standard che permettono una certa interattività con l'utente. Un utilizzo completo e significativo di tali elementi.
Gli standard web W3C standard HTML CSS “…a set of standardized best practices for building web sites, and a philosophy of web design and development.
Relatore Prof. Marco Porta Correlatore Prof. Luca Lombardi
JavaScript Generalità Cos'è JavaScript?
XHTML Corso linguaggi per il web a.s. 2011/2012 ITIS A. Righi – Corsico Relatore – Aldo Guastafierro.
UNIVERSITÁ DEGLI STUDI PISA DIPARTIMENTO DI INFORMATICA PAS T OSCANA -P ERCORSO ABILITANTE SPECIALE Progetto didattico integrato per un Liceo delle Scienze.
Lezione 3 Struttura lessicale del linguaggio
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
Introduzione a Javascript
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Relazione su Access Database
HTML. Notizie storiche Tim Berners-Lee stava cercando un modo per gestire e distribuire fra i colleghi grandi quantità d'informazioni e nel 1989 propose.
Ingegneria del software Modulo 1 -Introduzione al processo software Unità didattica 4 - Progettazione del software Ernesto Damiani Università degli Studi.
1 Il preprocessore. 2 Viene invocato dal gcc prima della compilazione vera e propria ( cpp ) Esegue delle manipolazioni testuali sul file –sostituisce.
E. Iacopini CERN 25 maggio Agenda: Introduzione (Enrico) Preparazione al Technical Run (Riccardo) Computing.
Introduzione ai fogli di stile Brevi note a cura di Emanuele Lana
PHP.  HTML (Hyper Text Markup Language)  CSS (Cascading Style Sheets)  Javascript (linguaggio di programmazione client)  PHP ( Hypertext Preprocessor.
XVRC2 Emanuele Ruffaldi Giugno Tre esperimenti con S3D ► Estensioni del Linguaggio ► Pre-Compilatore ► Esecuzione dentro il Java L C J.
Insegnamento “Tecniche audiovisive” Corso di Laurea in Ingegneria delle Comunicazioni Yahoo! Widget TV Marco Teodori Assistente Ricercatore - Fondazione.
HTML. Pagina HTML Struttura Titolo Hello World! Paragrafo apre il documento html contiene informazioni come il titolo della pagina, i meta tags, la codifica.
Enea Topi 1 ^B AS. 2014/2015. LA STORIA DI INTERNET Internet non è mai stata una rete militare, ma i militari sono alla radice della tecnologia su cui.

Consultazione delle carte da gioco collezionabili
LEZIONI DI INFORMATICA
Transcript della presentazione:

Implementazione di un motore per la colorazione della sintassi in GtkSourceView Relatore: Riccardo Sisto Candidati: Emanuele Aina Marco Barisione

GtkSourceView Widget di testo per GTK 2 con funzionalità avanzate per la programmazione Widget di testo per GTK 2 con funzionalità avanzate per la programmazione

Limiti del motore attuale Impossibilità di gestire strutture annidate Impossibilità di gestire strutture annidate #if 0 # if A # endif #endif nessuna colorazione #if 0 // FIXME: commento printf ("hello \n world"); // FIXME: commento printf ("hello \n world");

Limiti del motore attuale JavaScript dentro HTML: JavaScript dentro HTML: if (a<b) language = "stringa"; variabile = "stringa"; if (a<b) language = "stringa"; variabile = "stringa";

Obiettivi Gestire costrutti complessi Gestire costrutti complessi Linguaggi all'interno di altri linguaggi (JavaScript in HTML) Linguaggi all'interno di altri linguaggi (JavaScript in HTML) Semplicità nella descrizione dei linguaggi Semplicità nella descrizione dei linguaggi Non deve essere necessario programmare Non deve essere necessario programmare Buone prestazioni Buone prestazioni Nell'uso interattivo non devono essere visibili rallentamenti Nell'uso interattivo non devono essere visibili rallentamenti

Tecnologie esistenti Colorer Colorer Eccessiva complessità Eccessiva complessità Kate Kate Esposizione dellimplementazione nelle descrizioni dei linguaggi Esposizione dellimplementazione nelle descrizioni dei linguaggi Scintilla Scintilla Necessità di scrivere un lexer in C per ogni linguaggio Necessità di scrivere un lexer in C per ogni linguaggio VIM VIM Descrizioni basate su un motore di scripting Descrizioni basate su un motore di scripting Lanalisi è eseguita solo su una porzione del testo Lanalisi è eseguita solo su una porzione del testo

Nuovo motore: annidamenti Corretta gestione di strutture annidate Corretta gestione di strutture annidate #if 0 # if A # endif #endif nessuna colorazione #if 0 #if A

Nuovo motore: contesti Contesto: porzione di testo con significato sintattico Contesto: porzione di testo con significato sintattico Esempi: commenti, stringhe o parole chiave Esempi: commenti, stringhe o parole chiave Espressioni regolari Espressioni regolari Flessibilità nel riconoscimento di porzioni di testo Flessibilità nel riconoscimento di porzioni di testo Impossibilità di riconoscere costrutti complicati Impossibilità di riconoscere costrutti complicati Mancanza di ricorsività Mancanza di ricorsività Regolano le transizioni fra un contesto e l'altro Regolano le transizioni fra un contesto e l'altro

XML Standard W3C Standard W3C Estensibile Estensibile Il significato degli elementi è definito dallo sviluppatore Il significato degli elementi è definito dallo sviluppatore Ampia diffusione e supporto Ampia diffusione e supporto Validazione automatica Validazione automatica DTD DTD Schema Schema Relax NG Relax NG

Contesti semplici Non contengono sotto-contesti Non contengono sotto-contesti Identificati da un'unica espressione regolare Identificati da un'unica espressione regolare ^#include ".*?" ^#include ".*?" </context>

Contesti contenitore Delimitati da un'espressione regolare di inizio e da una di fine Delimitati da un'espressione regolare di inizio e da una di fine " " \\. \\.

Contesti keyword Lista di parole chiave Lista di parole chiave for for if if […] […]</context> Internamente sono contesti semplici Internamente sono contesti semplici

Contesti sub-pattern Non sono veri contesti Non sono veri contesti Identificano una porzione di un'espressione regolare Identificano una porzione di un'espressione regolare Corrispondono ad un "sub-pattern" di una espressione regolare Corrispondono ad un "sub-pattern" di una espressione regolare Numerati a partire da 1 Numerati a partire da 1 Possono essere contenuti in contesti semplici Possono essere contenuti in contesti semplici #include ("[^"]*") #include ("[^"]*")

Estensione dei contesti I contesti possono estendere il genitore I contesti possono estendere il genitore Non sempre è ciò che si vuole Non sempre è ciò che si vuole Attributo extend-parent del tag Attributo extend-parent del tag "hello \" world" escape string // Commento

Stili Separazione tra presentazione e descrizione Separazione tra presentazione e descrizione Nome visibile all'utente Nome visibile all'utente Associazione a stili predefiniti Associazione a stili predefiniti <style id="comment" name="Comment" name="Comment" map-to="def:comment"/> map-to="def:comment"/> Associazione dello stile al contesto con l'attributo style-ref Associazione dello stile al contesto con l'attributo style-ref Più contesti possono usare lo stesso stile Più contesti possono usare lo stesso stile

Riuso del codice Definire espressioni regolari usate frequentemente Definire espressioni regolari usate frequentemente Tag Tag Riferimento all'espressione regolare con \%{nome} Riferimento all'espressione regolare con \%{nome} Riferimento a contesti già definiti (attributo ref ) Riferimento a contesti già definiti (attributo ref ) Più contesti contengono lo stesso sotto-contesto Più contesti contengono lo stesso sotto-contesto Importazione di altre descrizioni Importazione di altre descrizioni C++ aggiunge solo alcune keyword al C C++ aggiunge solo alcune keyword al C def.lang contiene alcune definizioni comuni def.lang contiene alcune definizioni comuni

Analisi Viene analizzata una riga per volta Viene analizzata una riga per volta Ad ogni carattere si verifica se vi è una transizione dal contesto corrente verso un altro contesto Ad ogni carattere si verifica se vi è una transizione dal contesto corrente verso un altro contesto Contesti contenitore Contesti contenitore Il motore entra nel contesto quando trova l'espressione iniziale in Il motore entra nel contesto quando trova l'espressione iniziale in Il motore esce dal contesto quando trova l'espressione finale in Il motore esce dal contesto quando trova l'espressione finale in Contesti semplici Contesti semplici Il motore si sposta dopo la corrispondenza in Il motore si sposta dopo la corrispondenza in

if-in-if0 Esempio di analisi #if 0 # if A # endif #endif /* […] * FIXME * FIXME * […] * […] */ */ cif0if-in-if0 commentfixme if0 fixme comment Stato corrente: c

Albero degli stati L'insieme degli stati per ogni posizione nel testo è rappresentato da un albero L'insieme degli stati per ogni posizione nel testo è rappresentato da un albero c [0; 57] comment [30; 57]if0 [0; 29] fixme [40; 45]if-in-if0 [6; 22] Alla posizione 25 lo stato è: c if0

Accelerazione dell'analisi Ricerca delle corrispondenze ancorata o meno Ricerca delle corrispondenze ancorata o meno Prima implementazione: Prima implementazione: Per ogni carattere provate tutte le possibili transizione Per ogni carattere provate tutte le possibili transizione Seconda implementazione: Seconda implementazione: Fusione di tutte le possibili transizioni in un'unica espressione regolare Fusione di tutte le possibili transizioni in un'unica espressione regolare Suddivisione in due fasi: Suddivisione in due fasi: Ricerca della posizione della prima transizione Ricerca della posizione della prima transizione Ricerca della destinazione della transizione Ricerca della destinazione della transizione Miglioramento di un ordine di grandezza Miglioramento di un ordine di grandezza

Modifiche al testo Non è possibile rianalizzare l'intero file ad ogni modifica Non è possibile rianalizzare l'intero file ad ogni modifica Riciclare i contesti presenti prima della modifica Riciclare i contesti presenti prima della modifica I contesti che precedono la riga modificata vengono riciclati così come sono I contesti che precedono la riga modificata vengono riciclati così come sono La riga viene rianalizzata La riga viene rianalizzata Quando lo stato vecchio e quello nuovo coincidono si possono riciclare tutti i contesti successivi Quando lo stato vecchio e quello nuovo coincidono si possono riciclare tutti i contesti successivi

Esempio di modifica del testo a = 42 / primo */ + 1 /* secondo */; c [0; 36] error [15; 17] decimal [4; 6] comment [22; 35] decimal [20; 21]

Esempio di modifica del testo a = 42 /* primo */ + 1 /* secondo */; c [0; ?] error [15 +1; 17 +1] decimal [4; 6] comment [22 +1; 35 +1] decimal [20 +1; 21 +1] c [0; 36 +1]

c [0; ?] Esempio di modifica del testo a = 42 /* primo */ + 1 /* secondo */; c [0; 37] error [16; 18] decimal [4; 6] comment [23; 36] decimal [21; 22]

c [0; ?] Esempio di modifica del testo a = 42 /* primo */ + 1 /* secondo */; c [0; 37] error [16; 18] decimal [4; 6] comment [23; 36] decimal [21; 22] decimal [4; 6]

c [0; ?] Esempio di modifica del testo a = 42 /* primo */ + 1 /* secondo */; c [0; 37] error [16; 18] decimal [4; 6] comment [23; 36] decimal [21; 22] decimal [4; 6] comment [7; ?]

c [0; ?] Esempio di modifica del testo a = 42 /* primo */ + 1 /* secondo */; c [0; 37] error [16; 18] decimal [4; 6] comment [23; 36] decimal [21; 22] decimal [4; 6] comment [7; ?]

Esempio di modifica del testo a = 42 /* primo */ + 1 /* secondo */; c [0; ?] c [0; 37] error [16; 18] decimal [4; 6] comment [23; 36] decimal [21; 22] decimal [4; 6] comment [7; 18]

c [0; ?] Esempio di modifica del testo a = 42 /* primo */ + 1 /* secondo */; c [0; 37] error [16; 18] decimal [4; 6] comment [23; 36] decimal [21; 22] decimal [4; 6] comment [7; 18]

c [0; ?] Esempio di modifica del testo a = 42 /* primo */ + 1 /* secondo */; c [0; 37] error [16; 18] decimal [4; 6] comment [23; 36] decimal [21; 22] decimal [4; 6] comment [7; 18]

Esempio di modifica del testo a = 42 /* primo */ + 1 /* secondo */; c [0; 37] comment [7; 18] decimal [4; 6] comment [23; 36] decimal [21; 22]

Conclusioni Buone prestazioni Buone prestazioni Non si notano rallentamenti su macchine datate Non si notano rallentamenti su macchine datate Portatile Portatile Descrizione dei linguaggi semplice Descrizione dei linguaggi semplice Già realizzati: C, C++, JavaScript, HTML, XML, LaTeX Già realizzati: C, C++, JavaScript, HTML, XML, LaTeX Supporto del vecchio formato di descrizione dei linguaggi Supporto del vecchio formato di descrizione dei linguaggi

Sviluppi futuri Supporto di nuovi linguaggi Supporto di nuovi linguaggi Test di uso reale in Gedit, MonoDevelop, Meld Test di uso reale in Gedit, MonoDevelop, Meld Integrazione nel ramo ufficiale e quindi in GNOME Integrazione nel ramo ufficiale e quindi in GNOME Eliminazione del vecchio motore Eliminazione del vecchio motore Trasformazione dinamica del vecchio formato mediante il foglio di stile XSLT già scritto Trasformazione dinamica del vecchio formato mediante il foglio di stile XSLT già scritto