Creare un proprio linguaggio di programmazione per il web e applicazioni desktop, by Gabriele...
-
Upload
codemotion -
Category
Technology
-
view
3.518 -
download
0
Transcript of Creare un proprio linguaggio di programmazione per il web e applicazioni desktop, by Gabriele...
Diapositiva 1
Creare un proprio linguaggio di programmazione per il web e applicazioni desktop.
Gabriele Guizzardi
[email protected] Brain & [email protected] - Guizzardi.net
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?
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 :-)
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
Caratteristiche (pregi)
Dimensioni ridotte
Pochi cicli macchina per istruzione
Sintassi semplificata
Grammatica elementare
Portabilit
Caratteristiche (difetti)
Istruzioni di base
Assenza di annidamento istruzioni
Assenza di annidamento file sorgenti
Sintassi essenziale
La tecnologia web
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
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
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).
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.
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 ($)
L'interprete
| | ::= $
WRITE | | | |
WRITE Ciao Mondo!
LOAD
LOAD a 100
Esempio di codice
/programma di esempiowritewrite "Demo Funzioni Matematiche"line 20write
load a 4load b 6
add c $a $bwrite $a " + " $b " = " $c
sub c $a $bwrite $a " - " $b " = " $c
mul c $a $bwrite $a " ^ " $b " = " $c
div c $a $bwrite $a " / " $b " = " $c
mod c $a $bwrite $a " / " $b " resta " $c
and c $a $bwrite $a " AND " $b " = " $c
or c $a $bwrite $a " OR " $b " = " $c
xor c $a $bwrite $a " XOR " $b " = " $c
md5 x f test.txtwrite "MD5 di prova.txt = " $x
md5 x s passwordwrite "MD5 di password = " $x
Risultato dell'esempio di codice
Esempio di codice per il web
#!c:/SKIMPY/skimpy.exewebheaderwrite "Demo Funzioni
Matematiche
"line 20write "
"load a 4load 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 $bwrite "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 passwordwrite $x "
"
div c $a $bwrite $a " / " $b " = " $c "
"
write "MD5 di prova.txt = "md5 x f test.txtwrite $x "
"
Risultato dell'esempio di codice
Utilizzo su web host
SKIMPYProg.
GET
Utilizzo su web host
Utilizzo su web host
Il codice relativo
#!c:/SKIMPY/skimpy.exewebheader
write ""write "valore 1:
"write "valore 2:
"write ""
write $webgetenv "
"write $webgetvalue1 "
"write $webgetvalue2 "
"write "
"
goto esci:accediwrite "Password Corretta!
"extreturn:esciwrite "
Password Sbagliata!
"extreturn
md5 x s $webgetvalue2write "MD5 di " $webgetvalue2 " = " $x
if $x == "5f4dcc3b5aa765d61d8327deb882cf99" goto accedi
Integrazione con altri linguaggi
write "alert('Password Corretta!')"
write "Password Corretta!
"
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?
22/03/12
AUTORE
Nome speakerMail speaker company or community
22/03/12
AUTORE