1 / 20

CrashLang

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. Un Crash Test….

paulos
Download Presentation

CrashLang

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. Un Crash Test… • … 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 nell’impatto 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 un’idea della qualità sulle caratteristiche di sicurezza dell’auto che intendono acquistare.

  3. Il linguaggio CrashLang • 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. L’interprete 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.

  4. Un esempio di scheda Ciascuna scheda prevede quattro sezioni di test e due sezioni contenenti i dettagli dell’auto testata. Ad ogni sezione di test viene assegnato un giudizio complessivo, espresso sia in punti che in percentuale. Intestazione Giudizio complessivo Diviso in tre aree: per ciascuna devono essere elencati i giudizi (e quindi colori e punteggi) assegnati a quella parte dell’auto. 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 dell’immagine che sta sopra. Adultoccupant Per ciascuna fascia d’età, la colonna destra contiene le informazioni sul tipo di seggiolino testato. Child occupant Nel linguaggio si indica il valore numerico dei punteggi a sinistra. Il punteggio totale di questa sezione è dato dalla somma dei sette punteggi. 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. Safety assist Pedestrian Elenco di stringhe di dimensione variabile. Contiene le informazioni sull’auto testata e l’equipaggiamento di sicurezza presente. Tested car

  5. Obiettivo finale • L’intenzione è 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: • L’interprete viene invocato all’interno 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.

  6. Tecnologie utilizzate • Linguaggio di Programmazione: • Java 6 • Ambiente di sviluppo: • Eclipse Indigo (versioneJava EE) • Generazione parser, AST e visitor: • JavaCC + JTB (invocatitramite plugin Eclipse) • Automatizzazioneprocessi di build e deploy: • Apache Ant • Web server, JSP e servlet container: • Apache Tomcat (versione 7.0)

  7. Alcune produzioni • Tutte le sezioni sono generate da un’apposita produzione. Nelle prossime slide verranno mostrate le principali. Scope ::= Adult Child Pedestrian SafetyAssist TestedCar Equipment<EOF>

  8. Alcune produzioni Adult ::= < ADULT > < LBRACE > (AdultTest)+ < RBRACE > AdultTest ::= <ID > <LBRACE > (< ID >< EQUAL >< RATING >< SEMICOLON >)+ <RBRACE > Id è riconosciuto da una regular expression: < ID : ( < LETTER > | < DIGIT > |"_")+> < LETTER : ["a"-"z","A"-"Z"]> < DIGIT : ["0"-"9"]> Rating è riconosciuto da una regular expression: <RATING:"g"|"a"|"m"|"w"|"p">

  9. Alcune produzioni Child ::= < CHILD > < LBRACE > (ChildTest)+ ChildResult < RBRACE > ChildTest ::= < AGE > < EQUAL > < ID > < LBRACE > ExtraDescriptions (ChildResult)+ < RBRACE> ChildResult ::= < ID > < EQUAL > < POS_FLOAT > < SEMICOLON> Pos_float è riconosciuto da una regular expression: <POS_FLOAT:(<DIGIT>)+"."(<DIGIT>)+>

  10. Alcune produzioni Pedestrian ::= < PEDESTRIAN > < LBRACE > (< ID > < EQUAL > RatingArray< SEMICOLON > )+ < RBRACE> RatingArray ::= <LBRACKET >(< RATING >)+< RBRACKET > SafetyAssist::= < SAFETY_ASSIST > < LBRACE > (SafetyTest)+ < RBRACE > SafetyTest ::= < ID > < LBRACE > (< ID >< EQUAL >< TEST_RESULT >< SEMICOLON >)+ < RBRACE > Test_resultè riconosciuto da una regular expression: <TEST_RESULT :"pass" |"fail" |"not_assessed">

  11. Alcune produzioni TestedCar ::= <TESTED_CAR > <LBRACE > ExtraDescriptions <RBRACE > Equipment ::= <EQUIPMENT > <LBRACE > ExtraDescriptions <RBRACE > ExtraDescriptions ::= (Description)+ Description ::= <STRING > [ < EQUAL >< STRING > ] < SEMICOLON > Per fare in modo che la stringa contenga anche caratteri speciali, il tipo String è definito come segue. Il carattere ‘"’ è il delimitatore: < STRING : "\""(~["\"","\\","\n","\r"])*"\"" >

  12. Elenco dei token SKIP : { " " | "\r" | "\t" | "\n" } TOKEN : //sections & subsections { <EQUAL :"="> | <SEMICOLON :";"> | <LBRACE :"{"> | <RBRACE :"}"> | <LBRACKET :"["> | <RBRACKET :"]"> } TOKEN : //documentkeywords { < ADULT :"adult" > | <CHILD:"child" > | < AGE :"age" > | < PEDESTRIAN :"pedestrian" > | < SAFETY_ASSIST :"safety_assist" > | < TESTED_CAR :"tested_car" > | < EQUIPMENT :"equipment" > }

  13. La grammatica di CrashLang • Osservo la grammatica: • Non ci sono produzioni che accorciano la forma di frase. • Sulla parte sinistra delle produzioni c’è un solo simbolo terminale. • Secondo la classificazione di Chomsky, la grammatica ottenuta è context free, ovvero tutte le regole di produzione hanno la forma: • Vista l’assenza di self embedding nelle produzioni, la grammatica è anche regolare (tipo 3).

  14. È anche LL(1)? • Dato che non ho ε-rules, la condizione necessaria e sufficiente per avere una grammatica LL(1) è che i metasimboli che compaiono più a sinistra in produzioni alternative abbiano gli insiemi degli starter symbols disgiunti. • In questo caso le produzioni che contengono scelte non sono immediatamente visibili: • Si possono trovare traducendo +o la forma in BNF. • In molti casi, le "B" e le "D" sono costituite da soli simboli terminali, sempre diversi l’uno dall’altro.

  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 l’AST. Generato da JTB, contiene sia i visitor generati a default da JTB che i visitor ridefiniti JspVisitoreTreeVisitor. Contiene il file di build ANT e un file di propertiesper settare le directory del Java JDK e il deploypath di Tomcat. Contiene esempi di crash test scritti in linguaggio CrashLang. JSP che invoca l’interprete di CrashLang. JSP che mostra il codice contenuto in 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. JSP che mostra l’albero sintattico di un file CrashLang.

  16. La classe JspVisitor • 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. • L’albero 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.

  17. La classe TreeVisitor • Permette l’esplorazione dell’albero sintattico astratto ottenuto interpretando un file CrashLang. • Si appoggia alla libreria JavascriptjsTree, che decora i tag HTML della pagina dando ai nodi <ul>e <li>una struttura a directory. • La classe estende DepthFirstVoidArguVisitor, generato da JTB. • Ogni metodo emette i tag HTML sul PrintWriter passato come parametro.

  18. L’invocazione del visitor <body> <%@ include file="header.jsp" %> <% out.flush(); try { StringfileName = request.getParameter("car"); parser = newCrashParser(newFileInputStream(fileName)); parser.Scope().accept(newJspVisitor(), response.getWriter()); } catch(Exceptione) { %> <div id="content"> <div class="title">An error occurred while parsing the file:</div> <code> <% out.flush(); e.printStackTrace(response.getWriter()); %> </code> </div> <% } %> </body> Apertura del file CrashLang PrintWriter passato al visitor per emettere le tag HTML In caso di eccezione

  19. Colorare i manichini • Una pagina HTML, contiene al suo interno soltanto il link alle immagini che il browser deve scaricare, pertanto queste non possono essere generate dall’interprete di CrashLang assieme al resto del documento. • Dal momento che le combinazioni di colori sono troppe è impensabile mantenere sul server le immagini già colorate: l’immagine richiesta dal browser viene generata e restituita a run time da un’apposita servlet. • Le servlet leggono i parametri di GET lasciati dall’interprete: passando come parametri i giudizi assegnati, viene applicato su ciascuna parte del manichino il colore corrispondente. http://localhost/CrashLang/images/side.png ? head=g & chest=m & abdomen=p & pelvis=g URL su cui è mappata la servlet

  20. Deploy del progetto • Per il deploy è stato predisposto un file ANT che, direttamente all’interno dell’ambiente 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.

More Related