SlideShare a Scribd company logo
Creare un proprio linguaggio di programmazione
per il web e applicazioni desktop.
Gabriele Guizzardi
guizzardi@brainandbytes.com – Brain & Bytes
guizzardi@gmail.com - Guizzardi.net
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?
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 :-)
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
Nome speaker
Mail speaker – company or community
5
Caratteristiche (pregi)
• Dimensioni ridotte
• Pochi cicli macchina per istruzione
• Sintassi semplificata
• Grammatica elementare
• Portabilità
Nome speaker
Mail speaker – company or community
6
Caratteristiche (difetti)
• Istruzioni di base
• Assenza di annidamento istruzioni
• Assenza di annidamento file sorgenti
• Sintassi essenziale
Nome speaker
Mail speaker – company or community
7
La tecnologia web
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
Nome speaker
Mail speaker – company or community
9
Gli step realizzativi
• sintassi del linguaggio in generale (formalismo)
• sintassi di ogni singola istruzione
<istruzione> ::= <comando> <parametro/i> | <variabile> <valore>
<numero> ::= <cifra> | <numero> <cifra>
<cifra> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
• consiglio: diagrammi di flusso
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).
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 l’albero sintattico di x.
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 ($)
Nome speaker
Mail speaker – company or community
13
L'interprete
<variabile> | <variabile d’ambiente> | <costante> ::= $<lettera>
WRITE | <testo> | <testo> <var.> | <var.> | <var. d’ambiente>
WRITE “Ciao Mondo!”
LOAD <variabile> <valore>
LOAD a 100
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
Nome speaker
Mail speaker – company or community
15
Risultato dell'esempio di codice
Nome speaker
Mail speaker – company or community
16
Esempio di codice per il web
#!c:/SKIMPY/skimpy.exe
webheader
write "<b><i>Demo Funzioni Matematiche<br></i></b>"
line 20
write "<br>"
load a 4
load b 6
add c $a $b
write $a " + " $b " = " $c "<br>"
sub c $a $b
write $a " - " $b " = " $c "<br>"
mul c $a $b
write $a " ^ " $b " = " $c "<br>"
mod c $a $b
write "Il resto di " $a " / " $b " è " $c "<br>"
and c $a $b
write $a " AND " $b " = " $c "<br>"
or c $a $b
write $a " OR " $b " = " $c "<br>"
xor c $a $b
write $a " XOR " $b " = " $c "<br>"
write "MD5 di password = "
md5 x s password
write $x "<br>"
div c $a $b
write $a " / " $b " = " $c "<br>"
write "MD5 di prova.txt =
"
md5 x f test.txt
write $x "<br>"
Nome speaker
Mail speaker – company or community
17
Risultato dell'esempio di codice
Nome speaker
Mail speaker – company or community
18
Utilizzo su web host
SKIMPY Prog.GET
Nome speaker
Mail speaker – company or community
19
Utilizzo su web host
Nome speaker
Mail speaker – company or community
20
Utilizzo su web host
Nome speaker
Mail speaker – company or community
21
Il codice relativo
#!c:/SKIMPY/skimpy.exe
webheader
write "<FORM METHOD=GET ACTION='demoweb.smy'>"
write "valore 1: <INPUT NAME='valore1'><BR>"
write "valore 2: <INPUT NAME='valore2'><BR>"
write "<INPUT TYPE=SUBMIT></FORM>"
write $webgetenv "<br>"
write $webgetvalue1 "<br>"
write $webgetvalue2 "<br>"
write "<br>"
goto esci
:accedi
write "<p style='width:40%; color:#660099;
text-align:left; background-color:#ffcc00;'
>Password Corretta!<br>"
extreturn
:esci
write "<br>Password Sbagliata!<br>"
extreturn
md5 x s $webgetvalue2
write "MD5 di " $webgetvalue2 " = " $x
if $x == "5f4dcc3b5aa765d61d8327deb882cf99"
goto accedi
Nome speaker
Mail speaker – company or community
22
Integrazione con altri linguaggi
write "<script type='text/javascript'>alert('Password Corretta!')</script>"
write "<p style='width:40%; color:#660099; text-align:left;
background-color:#ffcc00;' >Password Corretta!<br>"
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?

More Related Content

Similar to Codemotion 2012 creare un proprio linguaggio di programmazione

MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
Stefano Dindo
 
Al telefono con Adhearsion e Ruby
Al telefono con Adhearsion e RubyAl telefono con Adhearsion e Ruby
Al telefono con Adhearsion e Ruby
Luca Pradovera
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni web
Andrea Lazzarotto
 
Gianfrasoft Corso Di Php Parte 1
Gianfrasoft   Corso Di Php   Parte 1Gianfrasoft   Corso Di Php   Parte 1
Gianfrasoft Corso Di Php Parte 1Gianfranco Fedele
 
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web  dall'antichità all'avanguardia e ritornoSviluppo web  dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritorno
lordarthas
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacyTommaso Torti
 
Syntactical errors detection 2
Syntactical errors detection 2Syntactical errors detection 2
Syntactical errors detection 2
LucaPostiglione2
 
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore RomeoHTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
marcocasario
 
Php mysql3
Php mysql3Php mysql3
Php mysql3
orestJump
 
Bash intro
Bash introBash intro
Bash intro
Giuseppe Levi
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ Code
Daniele Mondello
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018
Marco Parenzan
 
Ruby in 25 minuti
Ruby in 25 minutiRuby in 25 minuti
Ruby in 25 minuti
Marcello Missiroli
 
Seminario team working - 21-1-2015
Seminario team working - 21-1-2015Seminario team working - 21-1-2015
Seminario team working - 21-1-2015
Alessandro Loffredo
 
Lezione5 - MIPS & SPIM Unicam
Lezione5 - MIPS & SPIM UnicamLezione5 - MIPS & SPIM Unicam
Lezione5 - MIPS & SPIM UnicamNicola Paoletti
 
[BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA][BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA]
Matteo Collica
 
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL ServerSql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Alessandro Alpi
 

Similar to Codemotion 2012 creare un proprio linguaggio di programmazione (20)

MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
 
Al telefono con Adhearsion e Ruby
Al telefono con Adhearsion e RubyAl telefono con Adhearsion e Ruby
Al telefono con Adhearsion e Ruby
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni web
 
Gianfrasoft Corso Di Php Parte 1
Gianfrasoft   Corso Di Php   Parte 1Gianfrasoft   Corso Di Php   Parte 1
Gianfrasoft Corso Di Php Parte 1
 
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web  dall'antichità all'avanguardia e ritornoSviluppo web  dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritorno
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacy
 
Syntactical errors detection 2
Syntactical errors detection 2Syntactical errors detection 2
Syntactical errors detection 2
 
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore RomeoHTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
 
Php mysql3
Php mysql3Php mysql3
Php mysql3
 
Bash intro
Bash introBash intro
Bash intro
 
Pycon
PyconPycon
Pycon
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ Code
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018
 
Ruby in 25 minuti
Ruby in 25 minutiRuby in 25 minuti
Ruby in 25 minuti
 
Seminario team working - 21-1-2015
Seminario team working - 21-1-2015Seminario team working - 21-1-2015
Seminario team working - 21-1-2015
 
Lezione5 - MIPS & SPIM Unicam
Lezione5 - MIPS & SPIM UnicamLezione5 - MIPS & SPIM Unicam
Lezione5 - MIPS & SPIM Unicam
 
[BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA][BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA]
 
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL ServerSql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
 

Codemotion 2012 creare un proprio linguaggio di programmazione

  • 1. Creare un proprio linguaggio di programmazione per il web e applicazioni desktop. Gabriele Guizzardi guizzardi@brainandbytes.com – Brain & Bytes guizzardi@gmail.com - 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 <istruzione> ::= <comando> <parametro/i> | <variabile> <valore> <numero> ::= <cifra> | <numero> <cifra> <cifra> ::= 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 l’albero 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 <variabile> | <variabile d’ambiente> | <costante> ::= $<lettera> WRITE | <testo> | <testo> <var.> | <var.> | <var. d’ambiente> WRITE “Ciao Mondo!” LOAD <variabile> <valore> 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 "<b><i>Demo Funzioni Matematiche<br></i></b>" line 20 write "<br>" load a 4 load b 6 add c $a $b write $a " + " $b " = " $c "<br>" sub c $a $b write $a " - " $b " = " $c "<br>" mul c $a $b write $a " ^ " $b " = " $c "<br>" mod c $a $b write "Il resto di " $a " / " $b " è " $c "<br>" and c $a $b write $a " AND " $b " = " $c "<br>" or c $a $b write $a " OR " $b " = " $c "<br>" xor c $a $b write $a " XOR " $b " = " $c "<br>" write "MD5 di password = " md5 x s password write $x "<br>" div c $a $b write $a " / " $b " = " $c "<br>" write "MD5 di prova.txt = " md5 x f test.txt write $x "<br>"
  • 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 "<FORM METHOD=GET ACTION='demoweb.smy'>" write "valore 1: <INPUT NAME='valore1'><BR>" write "valore 2: <INPUT NAME='valore2'><BR>" write "<INPUT TYPE=SUBMIT></FORM>" write $webgetenv "<br>" write $webgetvalue1 "<br>" write $webgetvalue2 "<br>" write "<br>" goto esci :accedi write "<p style='width:40%; color:#660099; text-align:left; background-color:#ffcc00;' >Password Corretta!<br>" extreturn :esci write "<br>Password Sbagliata!<br>" 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 "<script type='text/javascript'>alert('Password Corretta!')</script>" write "<p style='width:40%; color:#660099; text-align:left; background-color:#ffcc00;' >Password Corretta!<br>"
  • 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?