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?