La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "Implementazione di un motore per la colorazione della sintassi in GtkSourceView Relatore: Riccardo Sisto Candidati: Emanuele Aina Marco Barisione."— Transcript della presentazione:

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

2 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

3 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");

4 Limiti del motore attuale JavaScript dentro HTML: JavaScript dentro HTML: if (a

5 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

6 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

7 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

8 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

9 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

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

11 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 " " \\. \\.

12 Contesti keyword Lista di parole chiave Lista di parole chiave for for if if […] […] Internamente sono contesti semplici Internamente sono contesti semplici

13 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 ("[^"]*")

14 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

15 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