|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Apr 2007
Messaggi: 15
|
[Java] Creazione di un COMPILATORE in TurboPascal
Ciao ragazzi!
Assieme ad un paio di amici avevamo pensato di realizzare un compilatore per la tesina in linguaggio Java (per la caratteristica multipiattaforma) o TurboPascal (per la nostra conoscenza in merito). Partendo dai molti manuali trovati in rete, voi avete qualche consiglio da darci? Attendo vostre risposte, grazie...
__________________
<A8RMVP Deluxe (24°C)><AMD X2 [email protected] (37°C)><2x 1GB DDR [email protected]><2x ATI X1600XT><Cisco 803 (Digital Diviso!!)> |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Realizzare un compilatore non è cosa semplice, ma con strumenti come ANTLR diventa tutto molto più semplice.
ANTLR permette di generare parser in diversi linguaggi. Java è supportato, ma Turbo Pascal no, però è supportato Delphi che è il suo successore.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
ANTLR produce parser di tipo LL(k) che non sono il massimo dell'efficienza.
Io ti consiglio Flex/Bison che produce parser di tipo LALR. Genera sorgenti in linguaggio C. Un esempio di compilatore realizzato con Bison è il famoso GCC. Se proprio vuoi utilizzare Java, c'è JFlex/BYACC che ti permette di scegliere tra la generazione di sorgenti in C o in Java. Questi strumenti ti danno una mano nelle prime due fasi del processo di compilazione: analisi lessicale(Flex, JFlex) e sintattica(Bison, BYACC). Per le fasi successive, analisi semantica, generazione del codice, etc non esistono, purtroppo, tools automatici. Un corso che ho trovato molto buono è quello della Stanford University. Ultima modifica di Vincenzo1968 : 29-09-2008 alle 14:39. |
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Apr 2007
Messaggi: 15
|
Interessante ragazzi, non avevo considerato la cosa... Però l'idea mia, strettamente personale (magari i miei amici preferiscono la vostra strada), era quella di creare questo parser che traducesse istruzioni semplici (+,-,*,/,:=,sqrt,sqr,abs,...) scritte in un codice il più vicino possibile ad uno pseudo-linguaggio di programmazione. A traduzione completata, dopo aver valutato la correttezza lessico/sintattica del file oggetto generato (ed eventualmente corretta), mi piacerebbe avere un sorgente in assembler da compilare, linkare ed eseguire direttamente in DOS... Se non è chiaro, l'obiettivo non è quello di realizzare un linguaggio ultra sofisticato ed evoluto... Già ne esistono... Mi basterebbe il mio compilatore personale da perfezionare nel tempo... Il fine è prettamente didattico... Ergo... Cosa dite?...
__________________
<A8RMVP Deluxe (24°C)><AMD X2 [email protected] (37°C)><2x 1GB DDR [email protected]><2x ATI X1600XT><Cisco 803 (Digital Diviso!!)> |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Quote:
Al posto vostro (considerato il target) seguirei l'approccio proposto da cdimauro, così facendo vi risparmiereste tanti grattacapi. Date un'occhiata a ANTLRWorks, vi permette di creare la grammatica in maniera visuale. |
|
|
|
|
|
|
#6 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Qui trovi un esempio di un piccolo interprete per espressioni aritmetiche. Utilizza un automa a stati finiti di tipo pushdown(tecnica utilizzata da entrambi i tipi di parser, LL(k) e LALR). P.S. Prima ti avevo consigliato il corso della Stanford University: http://www.stanford.edu/class/cs143/ Purtroppo, la versione corrente, non contiene il corso completo. Dovrei avere da qualche parte i pdf scaricati qualche tempo fa. Ti spiega passo passo le varie fasi per la creazione di un compilatore. |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Vincenzo, devono realizzare una tesina, non un compilatore HPF.
ANTLR va benissimo e con ANTLRWork "writing compilers was never been so much fun" (vediamo chi azzecca la citazione Poi non è vero che i compilatori LL(k) sono sempre più inefficienti di quelli LR(k) o LALR: dipende da come vengono scritti e dal linguaggio di programmazione di cui implementare il parser. Anzi, i recursive descent parser generati da grammatiche LL(k) si sono sempre distinti per velocità in passato. Vero è che le vecchie versioni di ANTLR erano molto più lente di YACC/Bison et similia, ma col tempo il codice generato sta migliorando nettamente. In ANTRL 3.1 sono stati introdotti i DFA e dall'analisi del codice prodotto noto enormi miglioramenti rispetto alla 3.0; e t'assicuro che ci sono comunque ottimi margini di miglioramento per il futuro.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#9 | ||
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Tratto da Compilers Principles, Tecniques and Tools di Aho, Lam, Sethi, Ullman(2006): Quote:
Ultima modifica di Vincenzo1968 : 30-09-2008 alle 16:30. |
||
|
|
|
|
|
#10 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
|
|
|
|
|
|
#11 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Il lavoro originale, del 1965, di colui che ha sviluppato le tecniche LR(k), il grande Knuth:
http://www.cs.dartmouth.edu/~mckeema...s/LR/LR607.pdf http://www.cs.dartmouth.edu/~mckeema...s/LR/LR608.pdf http://www.cs.dartmouth.edu/~mckeema...s/LR/LR609.pdf http://www.cs.dartmouth.edu/~mckeema...s/LR/LR610.pdf http://www.cs.dartmouth.edu/~mckeema...s/LR/LR611.pdf http://www.cs.dartmouth.edu/~mckeema...s/LR/LR612.pdf http://www.cs.dartmouth.edu/~mckeema...s/LR/LR613.pdf http://www.cs.dartmouth.edu/~mckeema...s/LR/LR614.pdf http://www.cs.dartmouth.edu/~mckeema...s/LR/LR615.pdf http://www.cs.dartmouth.edu/~mckeema...s/LR/LR616.pdf |
|
|
|
|
|
#12 | ||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Ricordo che i compilatori Borland di Turbo Pascal & affini erano realizzati usando parser recursive descent (quindi LL(k)) e non hanno avuto rivali quanto a velocità di compilazione. Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
|
|
|
|
|
#13 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Ultima modifica di Vincenzo1968 : 30-09-2008 alle 21:27. |
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quando l'efficienza diventerà un requisito di cui tener conto, ne riparleremo.
Intanto ANTLR col tempo è come il vino: migliora, anche sotto l'aspetto dell'efficienza.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#15 | ||
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Ho appena scaricato i sorgenti di Python e questo è il commento che si trova alla fine del file parser.c: Quote:
Se avessero scelto, per l'implementazione del parser, la meno facile via delle grammatiche di tipo LALR(1), sarebbe stato meglio, non credi? E ci sarebbe da chiedersi perchè, tra le facili vie, non abbiano scelto ANTLR. È forse gente che non ama il divertimento? |
||
|
|
|
|
|
#16 | ||||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Evidentemente chi lavora in questo campo non è fissato soltanto con l'efficienza... Quote:
Quote:
Peccato che tu non conosca né la storia di Python né segui la mailing list degli sviluppatori che ci lavorano: sapresti che quella di mantenere il linguaggio LL(k) è una precisa scelta per mantenere semplice la sua implementazione e manutenzione. Per maggiori informazioni, direttamente dall'interprete Python: Codice:
>>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those! Quote:
Immagino che tu, fissato come sei con l'efficienza, passerai il tuo tempo a riscriverti le applicazioni non appena avrai trovato qualche strumento e/o algoritmo che ti permetta di risparmiare mezzo ciclo di clock o byte. Ti meraviglierà sapere che c'è tanta gente che non bada a queste cose. Perché un buon informatico sa valutare se per un determinato problema l'efficienza è un requisito che bisogna rispettare. Comunque per la tua gioia ti passo questo http://codespeak.net/pypy/dist/pypy/doc/home.html link: si tratta di un compilatore Python... scritto in Python. Il massimo dell'efficienza, dirai tu. Beh, dai primi risultati sembra che sia mediamente più veloce di CPython (da cui hai tratto quel frammento di codice), che è scritto per una buona parte in C. Saranno stati dei folli. Eh, sì, l'efficienza... l'efficienza...
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||
|
|
|
|
|
#17 | ||
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Quote:
Sarò anche fissato con l'efficienza ma quando si tratta di scegliere un'implementazione che facilita la vita dello sviluppatore e una che avvantaggia invece l'utente finale, preferisco quest'ultima. No, non mi meraviglia affatto che c'è tanta gente che non bada a queste cose, ma io non sono un buon informatico P.S. Fammi capire una cosa: ogni volta che esce una nuova versione di ANTLR bisogna riscrivere tutto il codice?
Ultima modifica di Vincenzo1968 : 02-10-2008 alle 14:00. |
||
|
|
|
|
|
#18 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Guarda che bell'esempio di algoritmo di parsing, con tanto di backtracking:
tratto dalla documentazione del parser PyPy: Quote:
È forse gente fissata con l'efficienza? (certamente non si può dire che non siano dei buoni informatici) |
|
|
|
|
|
|
#19 | ||
|
Junior Member
Iscritto dal: Apr 2007
Messaggi: 15
|
Quote:
Quote:
__________________
<A8RMVP Deluxe (24°C)><AMD X2 [email protected] (37°C)><2x 1GB DDR [email protected]><2x ATI X1600XT><Cisco 803 (Digital Diviso!!)> |
||
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12883
|
Ragazzi in ingegneria non esiste parlare di assoluto, esistono dei compromessi. Poi questi possono essere buoni o meno, ma sempre di compromessi si tratta.
Ci sono algoritmi che vanno bene in un caso e male in un altro, e algoritmi che si comportano "mediamente" (dove per mediamente si intende nel caso medio) meglio rispetto ad altri. Risparmiare cicli di clock su una funzione che verrà chiamata si e no 1 volta su 1 milione, non apporta benefici al livello macroscopico. Tant'è che ad esempio all'interno della cpu alcuni circuiti nn sono minimizzati (anche se in quel caso è anche una questione di costi presumo). |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:42.




















