Codemotion 2012 creare un proprio linguaggio di programmazione

download Codemotion 2012 creare un proprio linguaggio di programmazione

If you can't read please download the document

Transcript of Codemotion 2012 creare un proprio linguaggio di programmazione

1. Creare un proprio linguaggio di programmazione per il web e applicazioni desktop. Gabriele Guizzardi [email protected] Brain & Bytes [email protected] - Guizzardi.net 2. Nome speaker Mail speaker company or community 2 La domanda Ha senso realizzare un altro linguaggio di programmazione vista la grande disponibilit di linguaggi e dialetti di cui si dispone? E' ancora possibile spendere decine di ore di lavoro per creare un linguaggio nuovo e su misura per se stessi? 3. Nome speaker Mail speaker company or community 3 Il progetto Scopo: realizzare un linguaggio di programmazione Target: risolvere specifici problemi con specifici comandi Tipo: linguaggio interpretato funzionale Struttura: scanner, lexer, parser, token Linguaggio utilizzato: C Utilizzo: scripting Nome: SKIMPY :-) 4. Nome speaker Mail speaker company or community 4 Gli scopi Creare un linguaggio formale Utilizzo di istruzioni classiche di un linguaggio Protocolli di comunicazione (seriale, parallelo, TCP, ecc.) Utilizzo di tecnologie hardware quali modem GSM, lettori di token o badge Gestione file di testo o strutturati (XML, CSV, ecc.) Utilizzo batch (client/server) e web 5. Nome speaker Mail speaker company or community 5 Caratteristiche (pregi) Dimensioni ridotte Pochi cicli macchina per istruzione Sintassi semplificata Grammatica elementare Portabilit 6. Nome speaker Mail speaker company or community 6 Caratteristiche (difetti) Istruzioni di base Assenza di annidamento istruzioni Assenza di annidamento file sorgenti Sintassi essenziale 7. Nome speaker Mail speaker company or community 7 La tecnologia web 8. Nome speaker Mail speaker company or community 8 Linguaggio formale insieme delle stringhe derivate da una grammatica insieme delle stringhe fornite da una espressione insieme delle stringhe accettate da un automa controlli binari (true/false) condizioni di controllo 9. Nome speaker Mail speaker company or community 9 Gli step realizzativi sintassi del linguaggio in generale (formalismo) sintassi di ogni singola istruzione ::= | ::= | ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 consiglio: diagrammi di flusso 10. Nome speaker Mail speaker company or community 10 Le basi del linguaggio (analisi lessicale) leggere il programma sorgente in elementi del lessico. separare i relativi elementi del lessico (token). eliminare sequenze inutili di caratteri come i commenti. collezionare informazioni in array o tabelle (p.e. per le variabili). 11. Nome speaker Mail speaker company or community 11 Le basi del linguaggio (analisi sintattica) processo dei token del linguaggio IF a = 0 formato da 4 token, cio IF, a, = e 0 Data una grammatica non contestuale G e una stringa x di caratteri terminali, analizzare sintatticamente x significa determinare se x appartiene a L(G) e, in tale caso, costruire lalbero sintattico di x. 12. Nome speaker Mail speaker company or community 12 L'interprete lettura del file sorgente scartando ogni commento ogni riga del file viene bufferizzata ed eseguita controllo della sintassi del comando in modo che non sia eseguito un comando errato controllo della sintassi del comando in modo che non sia eseguito un comando con un numero di parametri errati discriminazione di un carattere da una variabile ($) 13. Nome speaker Mail speaker company or community 13 L'interprete | | ::= $ WRITE | | | | WRITE Ciao Mondo! LOAD LOAD a 100 14. Nome speaker Mail speaker company or community 14 Esempio di codice /programma di esempio write write "Demo Funzioni Matematiche" line 20 write load a 4 load b 6 add c $a $b write $a " + " $b " = " $c sub c $a $b write $a " - " $b " = " $c mul c $a $b write $a " ^ " $b " = " $c div c $a $b write $a " / " $b " = " $c mod c $a $b write $a " / " $b " resta " $c and c $a $b write $a " AND " $b " = " $c or c $a $b write $a " OR " $b " = " $c xor c $a $b write $a " XOR " $b " = " $c md5 x f test.txt write "MD5 di prova.txt = " $x md5 x s password write "MD5 di password = " $x 15. Nome speaker Mail speaker company or community 15 Risultato dell'esempio di codice 16. Nome speaker Mail speaker company or community 16 Esempio di codice per il web #!c:/SKIMPY/skimpy.exe webheader write "Demo Funzioni Matematiche
" line 20 write "
" load a 4 load b 6 add c $a $b write $a " + " $b " = " $c "
" sub c $a $b write $a " - " $b " = " $c "
" mul c $a $b write $a " ^ " $b " = " $c "
" mod c $a $b write "Il resto di " $a " / " $b " " $c "
" and c $a $b write $a " AND " $b " = " $c "
" or c $a $b write $a " OR " $b " = " $c "
" xor c $a $b write $a " XOR " $b " = " $c "
" write "MD5 di password = " md5 x s password write $x "
" div c $a $b write $a " / " $b " = " $c "
" write "MD5 di prova.txt = " md5 x f test.txt write $x "
" 17. Nome speaker Mail speaker company or community 17 Risultato dell'esempio di codice 18. Nome speaker Mail speaker company or community 18 Utilizzo su web host SKIMPY Prog.GET 19. Nome speaker Mail speaker company or community 19 Utilizzo su web host 20. Nome speaker Mail speaker company or community 20 Utilizzo su web host 21. Nome speaker Mail speaker company or community 21 Il codice relativo #!c:/SKIMPY/skimpy.exe webheader write "" write "valore 1:
" write "valore 2:
" write "" write $webgetenv "
" write $webgetvalue1 "
" write $webgetvalue2 "
" write "
" goto esci :accedi write "

Password Corretta!
" extreturn :esci write "
Password Sbagliata!
" extreturn md5 x s $webgetvalue2 write "MD5 di " $webgetvalue2 " = " $x if $x == "5f4dcc3b5aa765d61d8327deb882cf99" goto accedi 22. Nome speaker Mail speaker company or community 22 Integrazione con altri linguaggi write "" write "

Password Corretta!
" 23. Nome speaker Mail speaker company or community 23 Conclusioni Quante ore uomo abbiamo impiegato? Quanto tempo per scrivere la base del linguaggio? Quanto tempo per scrivere nuove istruzioni? Siamo portabili e compatibili? Il ciclo di vita pu essere compromesso a breve? I costi sostenuti sono proporzionati al risultato?