Progettazione E Sviluppo Di Un' Architettura Ide Per Il Linguaggio Custom
Total Page:16
File Type:pdf, Size:1020Kb
ALMA MATER STUDIORUM - UNIVERSITÀ DI BOLOGNA SEDE DI CESENA SECONDA FACOLTÀ DI INGEGNERIA CON SEDE A CESENA CORSO DI LAUREA MAGISTRALE IN INGEGNERIA INFORMATICA PROGETTAZIONE E SVILUPPO DI UN’ ARCHITETTURA IDE PER IL LINGUAGGIO CUSTOM WDL (WIZARD DEFINITION LANGUAGE) IN AMBIENTE DISTRIBUITO Tesi in: Ingegneria dei sistemi software LM Presentata da Relatore: DAVIDE GALEOTTI Chiar.mo Prof. ANTONIO NATALI II SESSIONE ANNO ACCADEMICO 2011/2012 PAROLE CHIAVE IDE Domain specific languages CodeMirror Eclipse Xtext Indice Prefazione ........................................................................................................................ 9 Introduzione ..................................................................................................................... 9 Scopo ............................................................................................................................. 10 1 Integrated Development Environment .................................................................... 11 1.1 IDE: Cenni storici ........................................................................................... 11 1.2 IDE: Struttura ................................................................................................. 12 1.2.1 Editor ....................................................................................................... 12 1.2.2 Compilatori ed interpreti ........................................................................... 15 1.2.3 Linker ....................................................................................................... 16 1.2.4 Debugger .................................................................................................. 16 1.3 Gli IDE piu’ diffusi ad oggi ............................................................................ 18 1.3.1 IDE open source e free .............................................................................. 18 1.3.2 IDE commerciali ...................................................................................... 21 2 Linguaggi custom:DSL .......................................................................................... 23 2.1 DSL: Classificazione ...................................................................................... 24 2.1.1 DSL interni ............................................................................................... 24 2.1.2 DSL esterni ............................................................................................... 24 2.1.3 Language Workbench ............................................................................... 25 2.2 DSL: vantaggi e svantaggi .............................................................................. 26 2.2.1 Semantic model ........................................................................................ 28 3 Il linguaggio WDL................................................................................................. 30 3.1 Il Formula Language ...................................................................................... 32 3.1.1 Formula Language: tipi di dato, operatori e costrutti ................................. 32 3.1.2 Dot Notation ............................................................................................. 33 3.2 Le astrazioni ed espressività del linguaggio WDL ........................................... 35 3.2.1 Il blocco STEP .......................................................................................... 36 3.2.2 Il blocco FOREACHSTEP ........................................................................ 37 3.3 Il parser generator JavaCC. ............................................................................. 38 3.3.1 Che cos’è un parser generator? ................................................................. 38 3.3.2 Caratteristiche di JavaCC .......................................................................... 38 3.3.3 JavaCC in WDL ....................................................................................... 40 3.4 Un interprete per WDL ................................................................................... 43 3.5 WDL è un DSL? ............................................................................................. 45 4 Analisi del problema .............................................................................................. 47 4.1 Architettura dell’applicativo ........................................................................... 47 4.2 Requisiti ......................................................................................................... 51 4.2.1 Requisiti dell’IDE ..................................................................................... 51 4.2.2 Requisiti di sistema ................................................................................... 55 4.3 Analisi dei requisiti ......................................................................................... 55 4.3.1 Architettura logica del sistema .................................................................. 55 4.3.2 Interazioni nel sistema .............................................................................. 56 5 Soluzione basata su JavaScript code editor............................................................ 58 5.1 Architettura e pattern ...................................................................................... 58 5.2 I source code editor ........................................................................................ 59 5.2.1 JavaScript: accenni ................................................................................... 59 5.2.2 I più diffusi JavaScript-based code editor .................................................. 60 5.3 CodeMirror..................................................................................................... 63 5.3.1 Overview .................................................................................................. 63 5.3.2 CodeMirror: componenti principali .......................................................... 63 5.4 Sviluppi .......................................................................................................... 65 5.4.1 WizardEditorMB ...................................................................................... 66 5.4.2 La pagina JSP. .......................................................................................... 69 5.4.3 Syntax Highlighting: il modo i4CMixed ................................................... 72 5.4.4 Implementazione dell’autocompletamento ................................................ 76 5.4.5 Implementazione del folding ..................................................................... 79 5.4.6 Implementazione comment/uncomment .................................................... 79 5.4.7 Implementazione autosave ........................................................................ 80 5.4.8 Syntax checking........................................................................................ 81 5.4.9 Implementazione Go To Line, Find, Replace, Find Previous, Find Next, Match Bracket ............................................................................................................... 83 5.4.10 Esecuzione e debugging .......................................................................... 83 6 Soluzione basata su Xtext ...................................................................................... 84 6.1.1 Definizione della sintassi EBNF in Xtext .................................................. 85 6.1.2 Infrastruttura client-server per l’accesso all’applicativo ............................ 87 7 Conclusioni ........................................................................................................... 90 7.1 Sviluppi futuri ................................................................................................ 91 Appendici....................................................................................................................... 93 A. BNF ............................................................................................................... 93 Come funziona ..................................................................................................... 93 Quando usarla .....................................................................................................100 B. Syntax Directed Translation...........................................................................101 Come funziona ....................................................................................................101 Quando è utile .....................................................................................................109 C. Delimiter Directed Translation.......................................................................111 Come funziona ....................................................................................................111 Quando è utile .....................................................................................................114 D. Recursive Descent Parser ...............................................................................115 Come funziona ....................................................................................................115 Tabella riassuntiva ..............................................................................................117 Quando è utile .....................................................................................................118