Come rendere portatile il compilatore?

-1

Sto scrivendo un semplice compilatore. Ho scritto lexer e parser e ora genera codice assembly da un determinato codice. Ora ho bisogno di scrivere un assemblatore che generi codice macchina. Ma il problema è che voglio rendere portatile il mio compilatore. dovrebbe funzionare almeno sulle principali architetture. Un modo per farlo è scrivere diversi assemblatori per ogni architettura, ma sembra troppo difficile e richiede molto tempo.

Esiste un "minimo comune denominatore" per la maggior parte delle architetture con cui posso lavorare per rendere portatile il mio compilatore? Ad esempio, è solo necessario "scrivere un back-end che produce LLVM IR anziché assembly"?

    
posta A.Aydin 03.04.2018 - 19:08
fonte

1 risposta

9

non puoi creare un compilatore portatile (non nel senso che sogni).

Potresti creare un compilatore per una determinata macchina target o per una lingua (e quella macchina potrebbe anche essere qualcosa come LLVM o GCCJIT o Parrot che offrono la portabilità definendo alcuni modello astratto o linguaggio intermedio). È comune per compilare a C (ovvero scegliere C come lingua di destinazione, lasciando il peso del codice oggetto generazione al compilatore C del sistema).

Potresti creare un compilatore con diversi backend (magari configurabili al momento della configurazione o anche in fase di esecuzione). Ad esempio, x86-64, ARM, ecc. (E dipende anche dal sistema operativo di destinazione e ABI ). Questo non rende il tuo compilatore portatile.

Potresti (o non) vorresti definire alcune rappresentazioni intermedie comuni (cioè neutre al bersaglio) nel tuo compilatore (e potresti ottimizzare con queste rappresentazioni intermedie).

Leggi Drago Libro .

    
risposta data 03.04.2018 - 21:27
fonte