Torna indietro   Hardware Upgrade Forum > Software > Programmazione

AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-11-2013, 07: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, 09:12   #2
DoctorT
Senior Member
 
Iscritto dal: Jul 2005
Messaggi: 737
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, 10:25   #3
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
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 10:27.
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 29-11-2013, 12: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, 14: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


AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Vast prosegue la costruzione della stazi...
Chiarito cosa è successo al satel...
Il TAR annulla Bologna Città 30. ...
Laptop con chip NVIDIA da marzo? Emergon...
Costruito in casa, più veloce di ...
Il nuovo Galaxy Book 6 Pro costa il 25% ...
C'è un boom del mercato dei data ...
OVHcloud annuncia la disponiiblità...
Il Wi-Fi 7 ha un nuovo re: da ASUS arriv...
In arrivo l'auto "Frankenstein"...
Chip NVIDIA H200 in Cina? 'Come vendere ...
iPhone 16 torna super conveniente: ora c...
Offerte Amazon pazzesche: tech, smartpho...
Ubisoft annuncia l'arrivo dei 60 fps per...
Infratel Italia: ecco la nuova mappa del...
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: 21:51.


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