Creare un proprio linguaggio di programmazione per il web e applicazioni desk...Codemotion
Nonostante siano disponibili maree di linguaggi per programmare ha senso realizzare un proprio linguaggio per risolvere specifici problemi o per utilizzarlo con determinati ambienti e tecnologie?
Partendo dall'analisi della realizzazione di un vero e proprio linguaggio interpretato con sintassi in dialetto C/PHP si cercherà di illustrare se le metodologie, gli scopi e il prodotto finale hanno un senso pratico e migliorativo oppure la realizzazione di tali ambienti non sia più necessari.
Dopo una piccola introduzione al linguaggio Groovy, dove verranno illustrate brevemente alcune peculiarità, si passerà ad esaminare le caratteristiche che lo rendono adatto per la generazione di DSL.
Verrà quindi presentato come caso pratico la costruzione di una DSL e sarà mostrato come è possibile embeddarla in un progetto Java.
Intro a Linux tenuta all'università degli studi di Napoli Federico II. Speaker: Gabriele Previtera - https://www.linkedin.com/in/gabriele-previtera-6657648b/
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...Codemotion
Nonostante siano disponibili maree di linguaggi per programmare ha senso realizzare un proprio linguaggio per risolvere specifici problemi o per utilizzarlo con determinati ambienti e tecnologie?
Partendo dall'analisi della realizzazione di un vero e proprio linguaggio interpretato con sintassi in dialetto C/PHP si cercherà di illustrare se le metodologie, gli scopi e il prodotto finale hanno un senso pratico e migliorativo oppure la realizzazione di tali ambienti non sia più necessari.
Dopo una piccola introduzione al linguaggio Groovy, dove verranno illustrate brevemente alcune peculiarità, si passerà ad esaminare le caratteristiche che lo rendono adatto per la generazione di DSL.
Verrà quindi presentato come caso pratico la costruzione di una DSL e sarà mostrato come è possibile embeddarla in un progetto Java.
Intro a Linux tenuta all'università degli studi di Napoli Federico II. Speaker: Gabriele Previtera - https://www.linkedin.com/in/gabriele-previtera-6657648b/
MongoDB User Group Padova - Overviews iniziale su MongoDBStefano Dindo
MongoDB è un database non relazionale, orientato ai documenti. Classificato come un database di tipo NoSQL, MongoDB si allontana dalla struttura tradizionale basata su tabelle dei database relazionali in favore di documenti in stile JSON con schema dinamico (MongoDB chiama il formato BSON), rendendo l'integrazione di dati di alcuni tipi di applicazioni più facile e veloce.
Lo scopo del MongoDB User Group Padova è quello di condividere esperienze sulla tecnologia MongoDB.
Questa presentazione, usata durante il primo evento dello User Group, è stata usata per introdurre i partecipanti sulle procedure di installazione ed i concetti di base su MongoDB.
Oggi possiamo finalmente lasciarci alle spalle l’idea di dover utilizzare PHP per lo sviluppo web. Durante la presentazione verrà spiegato un semplice workflow che utilizzo per lavorare con Python, Flask, SQLite, Apache e Git per ridurre i bug, semplificare il codice e ottimizzare i tempi di deployment.
Questo intervento ha fatto parte del Linux Day 2017.
Il video è disponibile qui: https://youtu.be/0Rwd75iHZN4
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeomarcocasario
Talk di Salvatore Rome per il meeting di HTML5 Italy.
Se vi capita di avere fogli di stile disorganizzati, di usare il copia-incolla per ridefinire delle regole CSS, di dover cambiare un colore o un valore con Trova&Sostituisci... LESS è la soluzione.
Scopriremo l'uso delle variabili per definire i colori e le dimensioni principali, i mixin per creare regole complesse e riutilizzarle (come effetti ombra o animazioni), le nested rules per ordinare il codice e le funzioni per i colori.
Inoltre vedremo come sottolineare gli errori di sintassi e come automatizzare la compilazione in file CSS.
Dopo questo tutorial non vorrete più tornare ai CSS!
Continous Delivery e codice di Alta Qualità in PHP. Usare Git , Jenkins e diversi tool per realizzare codice di qualità e per effettuare il deploy in maniera automatica.
Presentazione effettuata al 5 incontro del Palermo PHP User Group al teatro Gregotti
C# is entering its third decade of life. And it is consistently evolving over the years with lot of new features. Let's recap the recent 7.x evolution and what we expect for the 8.0 features.
Con un approccio pratico, e ricco di esempi semplici per illustrare bene i concetti, impara le basi del linguaggio di scripting Bash, ormai divenuto uno standard de facto in termini di scripting di shell (Shell Scripting).
La presentazione si compone di 12 lezioni / capitoli:
1 - Introduzione
2 - Primi passi
3 - Variabili
4 - Array
5 - Aritmetica
6 - Test
7 - Costrutti condizionali
8 - Cicli iterativi
9 - Funzioni
10 - Quoting
11 - Terminare uno script
12 - Debugging
Per un totale di 98 diapositive
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL ServerAlessandro Alpi
SQL Server non è un mondo, è un universo ricco di funzionalità, architetture e tecnologie. Può spaventare e può essere difficile muoversi al suo interno con la necessaria fluidità. In questa sessione vedremo quali plugin e strumenti sono disponibili per velocizzare lo sviluppo su SQL Server, da Visual Studio Code a Management Studio, da SQL Operations Studio ai tool di RedGate. Migliorare gestione e scrittura di codice, con un occhio di riguardo alla condivisione e al team working, in un mondo in cui DevOps la fa da padrone.
More Related Content
Similar to Codemotion 2012 creare un proprio linguaggio di programmazione
MongoDB User Group Padova - Overviews iniziale su MongoDBStefano Dindo
MongoDB è un database non relazionale, orientato ai documenti. Classificato come un database di tipo NoSQL, MongoDB si allontana dalla struttura tradizionale basata su tabelle dei database relazionali in favore di documenti in stile JSON con schema dinamico (MongoDB chiama il formato BSON), rendendo l'integrazione di dati di alcuni tipi di applicazioni più facile e veloce.
Lo scopo del MongoDB User Group Padova è quello di condividere esperienze sulla tecnologia MongoDB.
Questa presentazione, usata durante il primo evento dello User Group, è stata usata per introdurre i partecipanti sulle procedure di installazione ed i concetti di base su MongoDB.
Oggi possiamo finalmente lasciarci alle spalle l’idea di dover utilizzare PHP per lo sviluppo web. Durante la presentazione verrà spiegato un semplice workflow che utilizzo per lavorare con Python, Flask, SQLite, Apache e Git per ridurre i bug, semplificare il codice e ottimizzare i tempi di deployment.
Questo intervento ha fatto parte del Linux Day 2017.
Il video è disponibile qui: https://youtu.be/0Rwd75iHZN4
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeomarcocasario
Talk di Salvatore Rome per il meeting di HTML5 Italy.
Se vi capita di avere fogli di stile disorganizzati, di usare il copia-incolla per ridefinire delle regole CSS, di dover cambiare un colore o un valore con Trova&Sostituisci... LESS è la soluzione.
Scopriremo l'uso delle variabili per definire i colori e le dimensioni principali, i mixin per creare regole complesse e riutilizzarle (come effetti ombra o animazioni), le nested rules per ordinare il codice e le funzioni per i colori.
Inoltre vedremo come sottolineare gli errori di sintassi e come automatizzare la compilazione in file CSS.
Dopo questo tutorial non vorrete più tornare ai CSS!
Continous Delivery e codice di Alta Qualità in PHP. Usare Git , Jenkins e diversi tool per realizzare codice di qualità e per effettuare il deploy in maniera automatica.
Presentazione effettuata al 5 incontro del Palermo PHP User Group al teatro Gregotti
C# is entering its third decade of life. And it is consistently evolving over the years with lot of new features. Let's recap the recent 7.x evolution and what we expect for the 8.0 features.
Con un approccio pratico, e ricco di esempi semplici per illustrare bene i concetti, impara le basi del linguaggio di scripting Bash, ormai divenuto uno standard de facto in termini di scripting di shell (Shell Scripting).
La presentazione si compone di 12 lezioni / capitoli:
1 - Introduzione
2 - Primi passi
3 - Variabili
4 - Array
5 - Aritmetica
6 - Test
7 - Costrutti condizionali
8 - Cicli iterativi
9 - Funzioni
10 - Quoting
11 - Terminare uno script
12 - Debugging
Per un totale di 98 diapositive
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL ServerAlessandro Alpi
SQL Server non è un mondo, è un universo ricco di funzionalità, architetture e tecnologie. Può spaventare e può essere difficile muoversi al suo interno con la necessaria fluidità. In questa sessione vedremo quali plugin e strumenti sono disponibili per velocizzare lo sviluppo su SQL Server, da Visual Studio Code a Management Studio, da SQL Operations Studio ai tool di RedGate. Migliorare gestione e scrittura di codice, con un occhio di riguardo alla condivisione e al team working, in un mondo in cui DevOps la fa da padrone.
Similar to Codemotion 2012 creare un proprio linguaggio di programmazione (20)
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
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
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>"
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?