Creare un proprio linguaggio di programmazione per il web e applicazioni desktop, by Gabriele...

download Creare un proprio linguaggio di programmazione per il web e applicazioni desktop, by Gabriele Guizzardi

If you can't read please download the document

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