|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2003
Città: Roma / Napoli ---------------------- Vi PREGO, chiamatemi Marcello, non HarryFocker... Merci...
Messaggi: 1814
|
[CURIOSITA'] Come si scrive un linguaggio?
Sto seguendo all'università il corso di elementi di Informatica in cui sto studiando il c(++).
Ora che so che per scrivere un "programma" c'è bisogno di un linguaggio di programmazione, mi ponevo la suddetta domanda. Come si scrive? Si usa un linguaggio precedente? Se si, il primo linguagigo come è stato scritto? Tutto questo su rieduchescional sciannel! ![]() Grazie a chi mi risponderà...
__________________
LOVE WILL TEAR US APART.
--- Cisco Systems CCNA Certified --- MyLastFM --- My Deviations --- Quando i 65daysofstatic si scioglieranno per problemi di droga del bassista... Io l'avevo già detto! ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
guarda, non mi reputo in grado di spiegartelo, ma ti consiglio di trovare "linguaggi e Traduttori"
__________________
My gaming placement |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Si usa un linguaggio per il quale esista un interprete. Per implementare il primo compilatore C (non conosco di preciso la storia, ma posso tirare ad indovinare), avranno usato un assembler, per il C++ il C e così via. Chiaro che puoi usare qualcunque linguaggio esistente per implementare il nuovissimo linguaggio ultra-figo X. Anzi, puoi usare anche il linguaggio stesso, una volta che hai pronto il "core".
La teoria dei compilatori è una branca piuttosto esoterica, ma molto affascinante. Se vuoi farti del male gratuitamente, studiala pure ![]() Comincia con lo scrive un programma che dica se un espressione del tipo (3 * (9 + 15)) / 2 è corretta (come in questo caso) oppure no...scoprirai che non è tanto banale ![]() EDIT: ho parlato di 'interprete', ma non fa molta differenza (a questo livello di discussione) con i linguaggi compilati. |
![]() |
![]() |
![]() |
#4 | |
Member
Iscritto dal: May 2005
Messaggi: 118
|
Quote:
Come giustamente ha detto shinya, il C è nato dall'assembly, nel momento in cui si è deciso di creare un linguaggio molto più semplice (ma allo stesso tempo a basso livello come l'assembly) per riscrivere una primissima versione del codice di Unix scritta interamente in assembly. Tutto questo se la memoria non mi inganna ![]() |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4741
|
Quote:
2) non tanto "dall", quanto "in": mancando altri compilatori si dovette usare direttamente il codice macchina , ma non si ha "parentela" tra assembly e C
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
|
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: May 2000
Messaggi: 1459
|
Quote:
<espressione> -> <termine>{<operatore><termine>}* <termine> -> 0-1-2-3-4-5-6-7-8-9 <operatore> -> + - / * una grammatica del genere dovrebbe (a meno di lapsus, data l'ora ![]() 5+9-6 o 6+8 o anche un solo numero, ad es 5 (il carattere * indica che il contenuto tra parentesi graffe può essere ripetuto 0, 1 o n volte). Se non ricordo male (è passato un annetto dal corso di linguaggi) tale grammatica è detta EBNF. La grammatica va poi analizzata (va costruita la tabella dei simboli, va fatta l'analisi FIRST/FOLLOWS etc) per giungere alla realizzazione di un parser. Ad esempio un generico e poco dettagliato parser per la grammatica che ho scritto prima potrebbe essere: void espressione(){ Termine(); AltraEspressione(); } void AltraEspressione(){ Operatore(); Termine(); if(è finito il file di cui si sta facendo il parsing) return; AltraEspressione(); } void Operatore(){ ... } void Termine(){ ... } A questo punto un parser siffatto è in grado di dire se un file è sintatticamente corretto, ma non è in grado di verificarne la semantica (ad es una espressione tipo 10/0 per il parser è corretta, ma non ha significato). Quindi il passo successivo è quello di realizzare un modulo di controllo semantico, poi uno di interpretazione (se ad es si vuole sapere il valore di un'espressione) e così via. Ora, considera che un linguaggio di alto livello può essere composto da centinaia se non migliaia di regole sintattiche che compongono la grammatica, e inoltre l'analisi semantica è estremamente complicata (basti pensare ad es al solo type checking) e bisogna fare la conversione in codice macchina. I ragionamenti che ho esposto tra l'altro valgono solo x alcuni tipi di grammatiche (dette LL(1), in quanto è possibile distinguere tra le varie entità sintattiche guardando il solo primo carattere di un token, cioè una unità di testo) e possono essere estesi alle grammatiche LL(k), ma ci sono altre grammatiche a cui si approccia in modo radicalmente differente (se nn ricordo male ne avevo viste alcune tipo SLR(1), ma potrebbe essere una castroneria). Quindi, se vuoi interessarti seriamente all'argomento, pensa che tutto quello ke ho scritto va moltiplicato x 10^32 ![]() ciauz |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: May 2000
Messaggi: 1459
|
ah, tra l'altro mi accorgo che sto pseudo parser che ho scritto è riferito ad una grammatica di forma + semplice (ho fatto il casting automatico
![]() |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
3dprog, a parte i complimenti per la spiegazione davvero esaurinte, una picola sottolineatura...
la firma tre righi ![]()
__________________
My gaming placement |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
io mi sono cimentato in questo è ho lasciato il progetto per cose + alla mia portata.
vorrei tanto che intervenisse repscasb su questo 3d la quale a collaborato al compilatoreTc 3.1 della borland..... |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
![]()
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
x fek: non l'ho mica capita...
x altri: se vi interessa il parsing c'è un libro aggratis molto esaustivo a questo indirizzo: http://www.cs.vu.nl/~dick/PTAPG.html Così vi viene il vomito ![]() |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
A proposito di compilatori e interpreti...facciamo una gara?
![]() Vediamo chi riesce a risolvere per primo questo problema http://spoj.sphere.pl/problems/FOOL/ Chi ce la fa posti il sorgente! (In realtà è una scusa, perchè io ci ho provato a mettermici lì una sera e non ci sono riuscito...ma forse dovrei mettermici più d'impegno! :P)
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4741
|
Quote:
"sì e poi c' era la marmotta che confezionava la cioccolata" ![]()
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
Ultima modifica di jappilas : 17-11-2005 alle 13:30. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:00.