Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
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: 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 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


Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Larry Ellison guadagna 101 miliardi in u...
Johnson Controls amplia la gamma di solu...
NASA Perseverance: il rover potrebbe ave...
Quelli di Immuni si 'pappano' Vimeo: Ben...
Changan lancia la Deepal S05 in Europa, ...
Substrati in vetro, Intel smentisce le v...
ECOVACS DEEBOT T50 PRO OMNI Gen2 fa piaz...
Windelo 62: catamarano a vela che unisce...
Francia, in arrivo un incentivo di 1.000...
Haier, la sorpresa a IFA: la lavatrice C...
GeForce RTX 5000 SUPER in arrivo? Sembra...
Ionity prova una soluzione contro i ladr...
Pirateria, svolta clamorosa: Dazn e Lega...
Maxi richiamo Toyota e Lexus: oltre 900....
Blackwell Ultra: fino al 45% di prestazi...
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: 23:46.


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