Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoGoffredo Carboni Modificato 10 anni fa
1
{ CrashLang Un linguaggio per raccogliere i risultati di un crash test Attività progettuale di Linguaggi e Modelli Computazionali M Anno Accademico: 2010/2011 Realizzato da: Luca Bettelli
2
… mette alla prova le automobili prossime alla commercializzazione, valutandone il livello di sicurezza. Vengono simulati in laboratorio i più comuni tipi di incidente, per verificare se la pressione subita nellimpatto da particolari manichini è tale da causare danni ai passeggeri della vettura. EuroNCAP è la società che realizza questi test in Europa. Esegue test più severi rispetto ai requisiti di sicurezza previsti dalle normative europee ed assegna un punteggio ai risultati ottenuti. Pubblica sul proprio sito web una scheda per ogni auto testata, così che i consumatori possano farsi unidea della qualità sulle caratteristiche di sicurezza dellauto che intendono acquistare. Un Crash Test…
3
Contiene gran parte delle informazioni presenti nelle schede del sito web di EuroNCAP. Rappresenta le informazioni in modo sintetico e leggibile. Non contiene i punteggi, a meno che non sia necessario. Linterprete ricaverà i punteggi mancanti direttamente dal testo. Per semplicità, alcune parti ridondanti o troppo prolisse delle schede di EuroNCAP non hanno una controparte in CrahLang. I punteggi ricavati dal testo non sono gli stessi presenti sul sito, perché non viene dichiarato quale peso si dà al punteggio dei singoli test nel calcolo del voto finale. Il linguaggio CrashLang
4
Giudizio complessivo Intestazione Un esempio di scheda Ciascuna scheda prevede quattro sezioni di test e due sezioni contenenti i dettagli dellauto testata. Ad ogni sezione di test viene assegnato un giudizio complessivo, espresso sia in punti che in percentuale. Adult occupant Child occupant Pedestrian Tested car Nel linguaggio si mettono solo i giudizi indicati in legenda. A ciascun giudizio corrisponde un colore e un punteggio. Il punteggio sotto ciascuna immagine è si ottiene sommando i punteggi parziali dellimmagine che sta sopra. Nel linguaggio si indica il valore numerico dei punteggi a sinistra. Il punteggio totale di questa sezione è dato dalla somma dei sette punteggi. Per ciascuna fascia detà, la colonna destra contiene le informazioni sul tipo di seggiolino testato. Safety assist Diviso in tre aree: per ciascuna devono essere elencati i giudizi (e quindi colori e punteggi) assegnati a quella parte dellauto. Sono tre test distinti. Ciascuno può avere valore fail, pass o not_assessed. Solo in caso pass viene assegnato un punto, negli altri casi zero. Elenco di stringhe di dimensione variabile. Contiene le informazioni sullauto testata e lequipaggiamento di sicurezza presente.
5
Lintenzione è quella di interpretare il linguaggio per ricostruire la pagina web di partenza: Voglio mantenere la struttura e i contenuti della pagina originale. Voglio calcolare automaticamente i punteggi. Voglio generare dinamicamente le immagini. Quindi… posso creare un sito web dinamico, che esegua su un opportuno web server. In ambiente Java: Linterprete viene invocato allinterno di una pagina JSP e manda in output direttamente dei tag HTML. Per le immagini posso usare delle Servlet, che colorano le parti del manichino in base ai parametri di GET ricevuti. Obiettivo finale
6
Linguaggio di Programmazione: Java 6 Ambiente di sviluppo: Eclipse Indigo (versione Java EE) Generazione parser, AST e visitor: JavaCC + JTB (invocati tramite plugin Eclipse) Automatizzazione processi di build e deploy: Apache Ant Web server, JSP e servlet container: Apache Tomcat (versione 7.0) Tecnologie utilizzate
7
Tutte le sezioni sono generate da unapposita produzione. Nelle prossime slide verranno mostrate le principali. Scope ::= Adult Child Pedestrian SafetyAssist TestedCar Equipment Alcune produzioni
8
Adult ::= ( AdultTest )+ AdultTest ::= ( )+ Alcune produzioni Rating è riconosciuto da una regular expression: Rating è riconosciuto da una regular expression: Id è riconosciuto da una regular expression: | | "_" )+ > Id è riconosciuto da una regular expression: | | "_" )+ >
9
Child ::= ( ChildTest )+ ChildResult ChildTest ::= ExtraDescriptions ( ChildResult )+ ChildResult ::= Alcune produzioni Pos_float è riconosciuto da una regular expression: )+ "." ( )+ > Pos_float è riconosciuto da una regular expression: )+ "." ( )+ >
10
Pedestrian ::= ( RatingArray )+ RatingArray ::= ( )+ SafetyAssist ::= ( SafetyTest )+ SafetyTest ::= ( )+ Alcune produzioni Test_result è riconosciuto da una regular expression: Test_result è riconosciuto da una regular expression:
11
TestedCar ::= ExtraDescriptions Equipment ::= ExtraDescriptions ExtraDescriptions ::= ( Description )+ Description ::= [ ] Alcune produzioni Per fare in modo che la stringa contenga anche caratteri speciali, il tipo String è definito come segue. Il carattere " è il delimitatore: Per fare in modo che la stringa contenga anche caratteri speciali, il tipo String è definito come segue. Il carattere " è il delimitatore:
12
SKIP : { " " | "\r" | "\t" | "\n" } TOKEN : //sections & subsections { | } Elenco dei token TOKEN : //document keywords { | }
13
La grammatica di CrashLang
14
È anche LL(1)?
15
Struttura del progetto Servlet per la generazione di immagini dinamiche. Contiene la grammatica del linguaggio e il parser generato da JavaCC. Generato da JTB, contiene le classi che costituiscono lAST. Generato da JTB, contiene sia i visitor generati a default da JTB che i visitor ridefiniti JspVisitor e TreeVisitor. Contiene il file di build ANT e un file di properties per settare le directory del Java JDK e il deploy path di Tomcat. JSP che mostra il codice contenuto in un file CrashLang. JSP che mostra lalbero sintattico di un file CrashLang. Intestazione del sito, inclusa nelle altre JSP. Legge il direttorio cars e propone in un menù a tendina le auto disponibili. Home page del sito CrashLang. Contiene esempi di crash test scritti in linguaggio CrashLang. JSP che invoca linterprete di CrashLang.
16
Interpreta un file CrashLang e dispone il suo contenuto in una pagina web visivamente simile a quella del sito EuroNCAP. Estende la classe DepthFirstRetArguVisitor, generata a default da JTB. Lalbero sintattico viene esplorato in modalità depth first. La classe estesa da JspVisitor è parametrica: Ogni metodo riceve in ingresso un PrintWriter: serve al visitor per emettere i tag HTML. Ogni metodo restituisce un oggetto Float: si usa per restituire al metodo chiamante i punteggi parziali ottenuti in una sottosezione. La classe JspVisitor
17
Permette lesplorazione dellalbero sintattico astratto ottenuto interpretando un file CrashLang. Si appoggia alla libreria Javascript jsTree, che decora i tag HTML della pagina dando ai nodi e una struttura a directory. La classe estende DepthFirstVoidArguVisitor, generato da JTB. Ogni metodo emette i tag HTML sul PrintWriter passato come parametro. La classe TreeVisitor
18
<% out.flush(); try { String fileName = request.getParameter("car"); parser = new CrashParser(new FileInputStream(fileName)); parser.Scope().accept(new JspVisitor(), response.getWriter()); } catch(Exception e) { %> An error occurred while parsing the file: <% out.flush(); e.printStackTrace(response.getWriter()); %> <% } %> Linvocazione del visitor Apertura del file CrashLang In caso di eccezione PrintWriter passato al visitor per emettere le tag HTML
19
Una pagina HTML, contiene al suo interno soltanto il link alle immagini che il browser deve scaricare, pertanto queste non possono essere generate dallinterprete di CrashLang assieme al resto del documento. Dal momento che le combinazioni di colori sono troppe è impensabile mantenere sul server le immagini già colorate: limmagine richiesta dal browser viene generata e restituita a run time da unapposita servlet. Le servlet leggono i parametri di GET lasciati dallinterprete: passando come parametri i giudizi assegnati, viene applicato su ciascuna parte del manichino il colore corrispondente. Colorare i manichini http://localhost/CrashLang/images/side.png ? head=g & chest=m & abdomen=p & pelvis=g URL su cui è mappata la servlet
20
Per il deploy è stato predisposto un file ANT che, direttamente allinterno dellambiente Eclipse, permette di compilare il progetto, realizzare il pacchetto WAR e inviarlo al web server. Per indicare la posizione del JDK e del direttorio di deployment vanno modificati i parametri del file ant/environment.properties. Sono anche presenti i target ANT che avviano o fermano il web server, nel caso sia necessario aggiornare il pacchetto WAR. Quando il server è in funzione è comunque possibile aggiornare i file statici grazie al target update.pages. Deploy del progetto
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.