Torna indietro   Hardware Upgrade Forum > Software > Programmazione

La rivoluzione dei dati in tempo reale è in arrivo. Un assaggio a Confluent Current 2025
La rivoluzione dei dati in tempo reale è in arrivo. Un assaggio a Confluent Current 2025
Siamo andati a Londra per partecipare a Current 2025, la conferenza annuale di Confluent. Il tema al centro dell'evento era l'elaborazione dei dati in tempo reale resa possibile da Apache Kafka, una piattaforma open source pensata proprio per questo. Si è parlato di come stia cambiando la gestione dei dati in tempo reale, del perché sia importante e di quali siano le prospettive per il futuro
SAP Sapphire 2025: con Joule l'intelligenza artificiale guida app, dati e decisioni
SAP Sapphire 2025: con Joule l'intelligenza artificiale guida app, dati e decisioni
A Madrid SAP rilancia sulla visione di un ecosistema integrato dove app, dati e AI generano un circolo virtuoso capace di affrontare l’incertezza globale. Joule diventa l’interfaccia universale del business, anche oltre il perimetro SAP
Dalle radio a transistor ai Micro LED: il viaggio di Hisense da Qingdao al mondo intero
Dalle radio a transistor ai Micro LED: il viaggio di Hisense da Qingdao al mondo intero
Una delle realtà a maggiore crescita nel mondo dell'elettronica di consumo, Hisense Group, affonda le sue radici nella storica città portuale di Qingdao, famosa per la sua birra. Ed è proprio qui il centro nevralgico dell'espansione mondiale dell'azienda, che sta investendo massicciamente in infrastrutture e ricerca per consolidare ulteriormente la propria leadership tecnologica.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-11-2013, 06:08   #1
iorfader
Senior Member
 
L'Avatar di iorfader
 
Iscritto dal: Nov 2010
Città: tra le colline calabresi
Messaggi: 5300
come si crea un linguaggio di programmazione

qualcuno sà spiegarmelo?
__________________
Positive: sfanrock,3Prozac, kiwivda, LordDevilX, remox, gaevulk,Dagored,boldre,mar81,Ales86 || Negative: niko0 -
|| Vendite --> -- VENDO Wii PRIMA EDIZIONE + GIOCHI || GIOCHI PS4
iorfader è offline   Rispondi citando il messaggio o parte di esso
Old 29-11-2013, 08:12   #2
DoctorT
Senior Member
 
Iscritto dal: Jul 2005
Messaggi: 736
Quote:
Originariamente inviato da iorfader Guarda i messaggi
qualcuno sà spiegarmelo?
non proprio però so che ci sono dei tools che ti aiutano a creare un linguaggio e qualche guida online tipo http://gnuu.org/2009/09/18/writing-y...-toy-compiler/
__________________
O.S.: WIN 10 64-bit CPU: INTEL I5 12400F RAM: 16 GB Corsair Vengeance LPX 3200 Mhz VGA: MSI ARMOR RX570 4GB OC MOBO: ASROCK B660M PRO RS HDD: Seagate 1TB SDD: CRUCIAL MX500 500GB ALI: BE QUIET PURE POWER CM 11 600W
DoctorT è offline   Rispondi citando il messaggio o parte di esso
Old 29-11-2013, 09:25   #3
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
Ci sono due fasi:

1) Design del linguaggio
2) Implementazione

(che sono le stesse per la produzione di molte altre cose)


Nel Design si specifica bene la sintassi del linguaggio e la semantica di ogni costrutto.
Quello che si fa è in genere costruire una "Grammatica", che definisce la sintassi del linguaggio, una serie di "token" disponibili al linguaggio (gli equivalenti in C++ di "int, float, for, if, il punto e virgola, le parentesi ... etc") che rappresentano i caratteri o parole chiave che hanno un significato particolare all'interno del linguaggio e il possibile ordine che questi possono avere in un ipotetico programma scritto nel linguaggio.

Le Grammatiche più comuni per i linguaggi di programmazione sono le Context Free Grammars (http://en.wikipedia.org/wiki/Context-free_grammar), perchè sono più facili da parsificare.

Come esempio qui trovi la grammatica del C++ in formato BNF (uno dei formati standard per la rappresentazione delle grammatiche):
http://www.nongnu.org/hcb/

Una volta che il linguaggio è specificato bisogna implementarlo. Per implementarlo bisogna scrivere un inteprete o un compilatore per il linguaggio. Se il linguaggio è dinamico sarà necessario scrivere anche la libreria o virtual-machine di supporto a runtime.

Il compilatore è composto da 3 parti:

1) Front-end
2) Middle-end
3) Back-end

Il front-end è la parte che capisce il sorgente del programma e lo trasforma in un formato facilmente analizzabile e trasformabile (cosiddetta "Rappresentazione Intermedia" o IR).
Il middle-end in genere è composto di una serie di passi che trasformano la rappresentazione intermedia applicando algoritmi di ottimizzazione ben noti (constant folding, loop unswitching, loop unrolling ... etc) e altri meno noti che generano un programma ottimizzato. Il middle-end è in genere target independent (ossia non dipende dalla macchina su cui gira).
Il back-end è la fase finale che si occupa di trasformare la rappresentazione intermedia target independent in linguaggio macchina o assembly per la macchina target. Il back-end applica anche ottimizzazioni specifiche per la macchina target.

In particolare il Front-end è di interesse quando si implementa un linguaggio nuovo, in quanto per le architetture più famose compilatori come GCC o LLVM hanno ha disposizione Middle e Back-ends già belli completi ai quali si possono attaccare un nuovo front-end per il linguaggio che si sta sviluppando ottenendo un compilatore completo in breve tempo (in particolare LLVM va molto di moda al momento: http://llvm.org/ . Un front-end famoso per il linguaggio C/C++/Objective-C costruito su LLVM è CLANG: http://clang.llvm.org/ ) Il front-end è composto tipicamente da 3 parti:

1) Lexer
2) Parser
3) Analizzatore semantico

Il Lexer (analizzatore lessicale in italiano) è un programma che prende in input il sorgente del programma e riconosce le parole chiave e i simboli del linguaggio ( virgole, punti e virgola, parentesi .. etc) e li trasforma in TOKENS facilmente analizzabili. Inoltre il Lexer rimuove tutti gli spazi in genere dall'input, perchè non sono semanticamente rilevanti ( anche se in alcuni linguaggi lo sono come il python, dove credo vengano gestiti diversamente).

Il Parser prende in input l'output del Lexer e , applicando le regole della grammatica sull'input, esso riconosce la struttura del sorgente costruendo un albero sintattico (Abstract Syntax Tree) che rappresenta il programma. Ci sono vari algoritmi di parsing. I più famosi sono quelli di tipo "a discesa ricorsiva" (più intuitivi, comuni per grammatiche di tipo LL) o quelli "ad ascesa ricorsiva" (comuni per grammatiche di tipo LR o LALR).
CLANG per esempio usa un parser "a discesa ricorsiva"

L'analizzatore semantico in fine prende in input l'albero sintattico e lo trasforma in IR applicando delle regole semantiche al riconoscimento di ogni nodo dell'albero sintattico (ad esempio vedendo un nodo di addizione "+" emette una istruzione della rappresentazione intermedia "add" e via dicendo per esempio).

Alla fine di questi passaggi si ha un IR che si può dare in pasto ai middle e back ends del compilatore che generano un codice oggetto/eseguibile.

Ciao
__________________
GPU Compiler Engineer

Ultima modifica di AnonimoVeneziano : 29-11-2013 alle 09:27.
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 29-11-2013, 11:02   #4
iorfader
Senior Member
 
L'Avatar di iorfader
 
Iscritto dal: Nov 2010
Città: tra le colline calabresi
Messaggi: 5300
Quote:
Originariamente inviato da AnonimoVeneziano Guarda i messaggi
Ci sono due fasi:

1) Design del linguaggio
2) Implementazione

(che sono le stesse per la produzione di molte altre cose)


Nel Design si specifica bene la sintassi del linguaggio e la semantica di ogni costrutto.
Quello che si fa è in genere costruire una "Grammatica", che definisce la sintassi del linguaggio, una serie di "token" disponibili al linguaggio (gli equivalenti in C++ di "int, float, for, if, il punto e virgola, le parentesi ... etc") che rappresentano i caratteri o parole chiave che hanno un significato particolare all'interno del linguaggio e il possibile ordine che questi possono avere in un ipotetico programma scritto nel linguaggio.

Le Grammatiche più comuni per i linguaggi di programmazione sono le Context Free Grammars (http://en.wikipedia.org/wiki/Context-free_grammar), perchè sono più facili da parsificare.

Come esempio qui trovi la grammatica del C++ in formato BNF (uno dei formati standard per la rappresentazione delle grammatiche):
http://www.nongnu.org/hcb/

Una volta che il linguaggio è specificato bisogna implementarlo. Per implementarlo bisogna scrivere un inteprete o un compilatore per il linguaggio. Se il linguaggio è dinamico sarà necessario scrivere anche la libreria o virtual-machine di supporto a runtime.

Il compilatore è composto da 3 parti:

1) Front-end
2) Middle-end
3) Back-end

Il front-end è la parte che capisce il sorgente del programma e lo trasforma in un formato facilmente analizzabile e trasformabile (cosiddetta "Rappresentazione Intermedia" o IR).
Il middle-end in genere è composto di una serie di passi che trasformano la rappresentazione intermedia applicando algoritmi di ottimizzazione ben noti (constant folding, loop unswitching, loop unrolling ... etc) e altri meno noti che generano un programma ottimizzato. Il middle-end è in genere target independent (ossia non dipende dalla macchina su cui gira).
Il back-end è la fase finale che si occupa di trasformare la rappresentazione intermedia target independent in linguaggio macchina o assembly per la macchina target. Il back-end applica anche ottimizzazioni specifiche per la macchina target.

In particolare il Front-end è di interesse quando si implementa un linguaggio nuovo, in quanto per le architetture più famose compilatori come GCC o LLVM hanno ha disposizione Middle e Back-ends già belli completi ai quali si possono attaccare un nuovo front-end per il linguaggio che si sta sviluppando ottenendo un compilatore completo in breve tempo (in particolare LLVM va molto di moda al momento: http://llvm.org/ . Un front-end famoso per il linguaggio C/C++/Objective-C costruito su LLVM è CLANG: http://clang.llvm.org/ ) Il front-end è composto tipicamente da 3 parti:

1) Lexer
2) Parser
3) Analizzatore semantico

Il Lexer (analizzatore lessicale in italiano) è un programma che prende in input il sorgente del programma e riconosce le parole chiave e i simboli del linguaggio ( virgole, punti e virgola, parentesi .. etc) e li trasforma in TOKENS facilmente analizzabili. Inoltre il Lexer rimuove tutti gli spazi in genere dall'input, perchè non sono semanticamente rilevanti ( anche se in alcuni linguaggi lo sono come il python, dove credo vengano gestiti diversamente).

Il Parser prende in input l'output del Lexer e , applicando le regole della grammatica sull'input, esso riconosce la struttura del sorgente costruendo un albero sintattico (Abstract Syntax Tree) che rappresenta il programma. Ci sono vari algoritmi di parsing. I più famosi sono quelli di tipo "a discesa ricorsiva" (più intuitivi, comuni per grammatiche di tipo LL) o quelli "ad ascesa ricorsiva" (comuni per grammatiche di tipo LR o LALR).
CLANG per esempio usa un parser "a discesa ricorsiva"

L'analizzatore semantico in fine prende in input l'albero sintattico e lo trasforma in IR applicando delle regole semantiche al riconoscimento di ogni nodo dell'albero sintattico (ad esempio vedendo un nodo di addizione "+" emette una istruzione della rappresentazione intermedia "add" e via dicendo per esempio).

Alla fine di questi passaggi si ha un IR che si può dare in pasto ai middle e back ends del compilatore che generano un codice oggetto/eseguibile.

Ciao
grazie per la risposta completa
__________________
Positive: sfanrock,3Prozac, kiwivda, LordDevilX, remox, gaevulk,Dagored,boldre,mar81,Ales86 || Negative: niko0 -
|| Vendite --> -- VENDO Wii PRIMA EDIZIONE + GIOCHI || GIOCHI PS4
iorfader è offline   Rispondi citando il messaggio o parte di esso
Old 29-11-2013, 13:42   #5
paolomec
Member
 
Iscritto dal: Nov 2013
Messaggi: 59
David Gries - Principi di progettazione di compilatori 1978 Franco Angeli ed. (1971 John Wiley & Sons Inc.)
Aho -Ullman - Principles of Compiler Design addison wensley 1977

... Bei tempi ....
paolomec è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


La rivoluzione dei dati in tempo reale è in arrivo. Un assaggio a Confluent Current 2025 La rivoluzione dei dati in tempo reale è ...
SAP Sapphire 2025: con Joule l'intelligenza artificiale guida app, dati e decisioni SAP Sapphire 2025: con Joule l'intelligenza arti...
Dalle radio a transistor ai Micro LED: il viaggio di Hisense da Qingdao al mondo intero Dalle radio a transistor ai Micro LED: il viaggi...
Meglio un MacBook o un PC portatile con Windows, oggi? Scenari, dubbi e qualche certezza Meglio un MacBook o un PC portatile con Windows,...
realme GT7: un "flaghsip killer" concreto! La recensione realme GT7: un "flaghsip killer" concr...
WhatsApp sta per introdurre gli username...
Successo per il primo test della PEC eur...
Cosa cambia con la partnership fra Pure ...
Sony abbandona la produzione interna deg...
Il futuro degli aerei elettrici passa pe...
Sentenza blocca i dazi di Trump: "I...
Xiaomi SU7 è super popolare nei m...
AMAZFIT Active 2 a 94€ e tutti gli altri...
Smartphone con super batteria: Realme pr...
L'IA supererà Bitcoin: consumi en...
E-tattoo: arriva il tatuaggio elettronic...
GreenMindAI Hackathon Catania: annunciat...
DeepSeek R1 si aggiorna: l'IA cinese ade...
Torna in offerta il portatile Lenovo con...
Windows 11: problemi di avvio dopo l'upd...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:47.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v