Newsgroup: it.comp.lang.c
Titolo: Scrivere un compilatore C

Vorrei scrivere un compilatore c per un processore che penso sia a molti
di voi sconosciuto (il SATURN, cioe' il fulcro delle calcolatrici HP48
g/gx).
Sapete darmi indicazioni su come impostare il lavoroo su dove trovare
info sulla scrittura di compilatori?
Megli se il tutto si puo' trovare in rete.....
                Grazie!
                                            Cap

> info sulla scrittura di compilatori?
Leggi tutto cio' che puoi su YACC.

 
Procurati il Dragon Book:
Aho, Sethi, Ullman "Compilers: Principles, Techniques and tools." 
Adison-Wesely
Comunque non e' cosa facile!
Forse ti conviene fare un "porting" del back-end del GCC (ammesso che
non ci sia gia'), 
http://www.gnu.org
 (naturalmente non girera' su una
hp48 :) ).
 
-- 
Andrea Vettori
------------------------
vet...@computer.org
http://www.dei.unipd.it/~vettori
    (italiano)
http://www.geocities.com/ResearchTriangle/9236
   (english)

 Leggi tutto cio' che puoi su YACC.
E cosa sarebbe????
Dove si trova??? URL???

Ti devo ringraziare perche' mi hai fatto rifare una attivita' che non facevo da
tempo, quella di usare Altavista per cercare siti riguardanti la teoria della
programmazione. Bastava digitare +yacc e leggere i risultati. Ho trovato cosi'
l'ottima page 
http://www.st.rim.or.jp/~kanada/programming.html#functional
 che ti portera' a
http://www.cs.utah.edu/csinfo/texinfo/bison/bison_toc.html
 dove troverai, spero,
quello che cerchi.
Dai un'icchiata anche a 
http://ourworld.compuserve.com/homepages/jussi/tMain.htm


cap.dsh@!!!nospam!!!.
iol.it
 wrote:
 >Sapete darmi indicazioni su come impostare il lavoroo su dove trovare
 >info sulla scrittura di compilatori?
Installa i sorgenti del gcc (da 
ftp.gnu.org
) e quindi aggiungi il supporto
per quel processore.
In questo modo avrai un crosscompiler da una infinita` di piattaforme verso
saturn e non dovrai perdere tempo a scrivere la parte che deve fare il
lavoro di parsing del linguaggio e di ottimizzazione.
-- 
ciao, | [Per rispondere togli "toglimi" dal mio indirizzo.]
Marco | If NT is the answer, you don't understand the question.

Andrea Vettori (
vet...@dei.unipd.it
) wrote:
: FC wrote:
: > 
: > Vorrei scrivere un compilatore c per un processore che penso sia a molti
: > di voi sconosciuto (il SATURN, cioe' il fulcro delle calcolatrici HP48
: > g/gx).
: > Sapete darmi indicazioni su come impostare il lavoroo su dove trovare
: > info sulla scrittura di compilatori?
: > Megli se il tutto si puo' trovare in rete.....
: > 
: 
[snip]
: Forse ti conviene fare un "porting" del back-end del GCC (ammesso che
: non ci sia gia'), 
http://www.gnu.org
 (naturalmente non girera' su una
: hp48 :) ).
:    
   Esiste gia'. Gira su linux e su win95 (comunque ci sono i sorgenti). Si
trova a:
http://www.cris.com/~ramos/hp48/hp48xgcc.htm
Linux - Why use Windows, since there is a door?
=============================================================================
: Sangoi Dino Leonardo  :                 You can reach me on               :
: Via Della Roggia 27/2 :         Internet : 
g100...@univ.trieste.it
       :
: 33013 Gemona, Italy   :     Phone: +39 432 970036   Fax: +39 432 974171   :
=============================================================================

g/gx).
Il mio consiglio e' quello di adattare un compilatore c gia'
esistente. Quelli che conosco sono il gcc e il lcc. Il gcc mi sembra
un po' troppo complesso. Punterei su lcc.
Puoi trovare un libro che dice come costruire un compilatore, che
contiene tutti i sorgenti dell lcc.
L'lcc (come il gcc) dovrebbe e' composto dal front-end e dal back-end.
il front-end legge il sorgente c e lo trasforma in un codice
intermedio, questo codice intermedio viene poi trasformato dal
back-end in codice macchina. Quindi pernso basta modificare il
back-end del lcc per fargli generare il codice macchima per il SATURN.
Lascerei perdere YACC e cercherei di sfruttare il lavoro fatto dagli
altri. Parser per il c c'e' ne saranno molti in giro. 
Puoi provare a dare un'occhiata a questi indirizzi
http://www.remcomp.com/lcc-win32/
http://www.geocities.com/SiliconValley/Heights/9069/index.html
e a fare una ricerca in rete. come ho detto c'e' un libro che spiega
come costruire un compilatore C, potresti volerlo acquistare.
Curiosita': il compilatore lo scrivi per hobby o per lavoro?
Spero di esserti stato utile. Fammi sapere come va.
Giovanni  (jframe AT 
iol.it
) 

Adison-Wesely
Se non sbaglio č stata pubblicata l'edizione italiana.
Iskandar

Megli se il tutto si puo' trovare in rete.....
Allora, devi scaricare tutto quello che puoi su Yacc e Lex, le due
utility delle quali si basa la progettazione.
Io ho una piccola guida, scaricata da internet, sulla scrittura di un
compilatore, ma devo ammettere un po' troppo superficiale.
Lex serve a crearti l'analizzatore lessicale e lo Yacc il parser vero
e proprio.
I porting sotto DOS sono quelli del Bison o il BYacc e del Flex.
Ci sono le versioni anche per il C++
Per il codice compilato ti conviene adottare un codice intermedio come
per il Java, per il quale intrapresi la scrittura di un compilatore
tempo fa, e trasportarlo poi, con l'apposito run-time, sulle diverse
piattaforme.
Avrai il vantaggio di creare un compilatore multi-piattaforma e non
sarebbe male !
Ciao !
Andrea
------------------------------------------------
combatti anche tu il "nano scemo" :
http://www.geocities.com/Hollywood/Studio/6989
------------------------------------------------

andrea_...@bigfoot.com
 wrote:
 >Allora, devi scaricare tutto quello che puoi su Yacc e Lex, le due
 >utility delle quali si basa la progettazione.
Perche` reinventare la ruota? Esiste gia` gcc che e` espandibile verso
piu` linguaggi e piu` piattaforme.
 >Avrai il vantaggio di creare un compilatore multi-piattaforma e non
 >sarebbe male !
Esiste gia`, e` gcc.


piu` linguaggi e piu` piattaforme.
Perche'  evidentemente questa persona vuole anche imparare a scrivere
un compilatore.


Andrea Laforgia (
andrea_...@bigfoot.com
) wrote:
: >
andrea_...@bigfoot.com
 wrote:
: > >Allora, devi scaricare tutto quello che puoi su Yacc e Lex, le due
: > >utility delle quali si basa la progettazione.
: >Perche` reinventare la ruota? Esiste gia` gcc che e` espandibile verso
: >piu` linguaggi e piu` piattaforme.
: Perche'  evidentemente questa persona vuole anche imparare a scrivere
: un compilatore.
Se vuole imparare a scrivere un compilatore e' una cosa.  Se vuole il
C per l'HP48, il GCC e' stato portato per il saturn.  Mi dispiace ma
non so dove trovare questo port. Potresti chiedere in comp.sys.hp48,
sicuramente qualcuno ti dira' dove trovarlo.
Ciao.
: Andrea


Esiste gia`, e` gcc.
Quello e' il C e il C++ ma sono insufficienti :D
Bye,
     Marco
Also on fidonet at 2:335/381.4 and 2:335/357.6

md...@no.spam.internetcafe.it
 wrote:
 >Ma i sentito dire di applicazioni scritte solo per scopi didattici ?!?
Si, ma non mi sembra che fosse questo lo scopo di chi ha fatto la domanda.
 >perche' scrivere linux esisteva gia' minix, ecc ecc
Perche` minix non e` free.
 >> >Avrai il vantaggio di creare un compilatore multi-piattaforma e non
 >> >sarebbe male !
 >>Esiste gia`, e` gcc.
 >Quello e' il C e il C++ ma sono insufficienti :D
Quello e` anche ADA, fortran, pascal e tra un po` java, quindi come vedi
puo` essere quello che vuoi.


Perche` minix non e` free.
Linux e' nato come esercitazione.
--------------------------------------------------------
Andrea      
mica uno qualunque...
--------------------------------------------------------

andrea_...@bigfoot.com
 wrote:
 >Se uno mi scrive "voglio scrivere un compilatore, come faccio ?"
 >Io gli rispondo dicendogli il modo in cui si costruisce.
Io invece gli spiego che probabilmente non e` necessario scriverlo da zero,
visto che nel 99% dei casi la gente non sa che esiste il gcc modificabile,
modulare ed espandibile.
 >> >perche' scrivere linux esisteva gia' minix, ecc ecc
 >>Perche` minix non e` free.
 >Linux e' nato come esercitazione.
Non e` vero. Linux e` nato perche` Linux voleva qualcosa per sfruttare il
suo PC.


puo` essere quello che vuoi.
:) lo so ma mi devi trattare sempre da newbie su linux :? :)) ci sono
migliaia di altri linguaggi al di fuori di questo 4-5 :D e ognuno e' nato
prima per scopi didattici e per problemi particolari..


      Marco
Saluti,
Andrea Glorioso

suo PC.
Io sapevo che era nato come esercizio sulle caratteristiche del 386.
E comunque e' una cosa che mi interessa poco !
Ciao


 Scrivi il "kernel" del parser e hai finito.
Non diciamo megaca**ate...
Il gcc, ad esempio, sono alcune centinaia di migliaia di righe... il
parser e' solo l'inizio.
Un compilatore "classico" e' composto di diverse fasi:
1. lexical analysis (questa fattibile col lex)
2. syntax analysis  (questa fattibile col yacc) 
3. semantic analysis
4. code generation
5. code optimization
Le 4 e 5 in genere vengono suddivise in
4. intermediate code generation
5. intermediate code optimization
6. final code generation
7. final code optimization
Non direi che fatto il "kernel" del parser hai finito...


md...@no.spam.internetcafe.it
 wrote:
 >Oddio mo facciamo i fiscali.. comperare un libro se lo possono permettere
 >quasi tutti, una volta comperato un PC...
Non importa, minix non e` comunque free.
 >e dei vari *BSD* :?
Quelli sono free.
-- 
Ciao, Marco * <HTML><META HTTP-EQUIV="Content-Type:text/html"><SCRIPT>
function X() {var Text = "HTML is not acceptable for using in mail " +
"or usenet so your browser will stop."; alert(Text); parent.close();};
</SCRIPT></HEAD><BODY onLoad="X();return true">Hi</HTML>

Non direi che fatto il "kernel" del parser hai finito...
Volevo dire che durante la fase di analisi del sorgente non devi
badare a eventuali funzioni predefinite dato che il C non ne possiede.
Costrure il "kernel" del parser significa costruire il cuore del
compilatore, privo di controlli su funzioni predefinite da trasformare
e quindi ogni cosa aggiuntiva puo' essere costruita sfruttando il
compilatore stesso.
E' cosi' che i primi compilatori C vennero scritti.
Spero di essere stato abbastanza chiaro.
ps.: dal Kernighan&Ritchie :
"Poiche' il C e' relativamente piccolo, puo' essere descritto in uno
spazio limitato.....Un compilatore per il C puo' essere semplice e
compatto. I compilatori stessi vengono scritti velocemente; usando la
tecnologia dei nostri giorni, e' probabile che si produca un
compilatore per una nuova macchina in un paio di mesi..."
Ciao :-)


quel paio di mesi...  ;)
Il giudizio sulla velocita' dipende strettamente dalla struttura del linguaggio.
Questa considerazione del k&r dice sicuramente molto riguardo la semplicita' di
un progetto del genere.
Andrea      
(per le risposte e-mail cancella CHITIHACHIESTONIENTE!!!! dal mio indirizzo)

 altrimenti quest'ultimo non avrebbe senso.
Il fatto che fare il parsing e basta sia piu' o meno inutile non ti
autorizza a dire che un programma calcolatrice implementato col yacc sia
un parser.  


 Leggi tutto cio' che puoi su YACC.
Rileggendo questo messaggio vorrei segnalare alcuni siti e un libro:
http://www.ocsltd.com/overload/
Qui' c'e' qualcosa sulla realizzazione dei compilaotri in C++ e sullo standard 
ANSI
http://www.cs.princeton.edu/~appel/modern/
Qui' c'e' un libro didattico molto interessante, o meglio ce ne sono 3 versioni,
uno per scivere compilaotori in C, uno in ML (non so che linguaggio sia) e uno ,
molto interessante, in Java.
E' praticamente lo stesso libro riscritto per 3 diversi linguaggi.
Inoltre ci sono i Link a Flex, Bison e altro SW interessante per i compilatori 
in C.
Il libro si puo' reperire per chi abita a Milano nella lbreria del Politecnico, 
costa 115000, se avete la tessera studenti c'e' uno sconto del 10-15%.
Inoltre c'e' un interessante emulatore di microprocessore MIPS (la CPU delle 
Silicon e delle nintendo), per scrivere compilatori per CPU RISC.
** Email replies to 
md7...@mclink.it
 **
visit my homepage at: 
http://www.volftp.tin.it/IT/IT/ITALIANI/rullo/index.htm