Voodoo Compiler è un'implementazione del linguaggio di programmazione Voodoo. & Nbsp; Il linguaggio di programmazione Voodoo è un linguaggio di programmazione a basso livello, astraendo su istruzione della piattaforma set e convenzioni di chiamata, ma per il resto lascia il programmatore libero di fare qualsiasi cosa.
Voodoo Compiler è scritto in Ruby e genera il codice per i386-compatibile, AMD64, e le CPU MIPS. Il supporto per le CPU di destinazione aggiuntivo è previsto per il futuro.
Utilizzo
Ci sono due modi principali per utilizzare il compilatore Voodoo: eseguendo il programma voodooc, o utilizzando l'API Ruby.
Il programma voodooc compila un file sorgente Voodoo. Il suo utilizzo è descritto nella pagina man voodooc.1, incluso nella distribuzione. Quanto segue è un esempio di come voodooc può essere utilizzato per creare un ciao eseguibile da un file sorgente hello.voo:
$ Voodooc hello.voo
$ Cc hello.o -o ciao
$ ./ciao
Ciao mondo!
Un'implementazione di hello.voo può essere trovata nella prova directory della distribuzione.
Il secondo modo di utilizzare il compilatore Voodoo è quello di utilizzare da un programma Ruby. Questo può essere usato, per esempio, per generare il codice per la piattaforma di destinazione senza dover creare un file .voo. Quanto segue è un esempio che crea un file oggetto chiamato fact.o, contenente una definizione di un fatto funzione che calcola fattoriali:
require 'voodoo'
Generatore = Voodoo :: CodeGenerator.get_generator: architettura =>: i386,
& Nbsp;: format =>: elf
generator.export: infatti
generator.add_function_label: infatti
generator.add_function [: n],
& Nbsp; [: ifle, [: n, 1],
& Nbsp; # poi
& Nbsp; [[: il ritorno, 1]],
& Nbsp; # altro
& Nbsp; [[: lasciare,: x,: sub, n, 1],
& Nbsp; [: set,: x,: chiamare,: infatti,: x],
& Nbsp; [: ritorno,: mul, n,: x]]]
File.open ('fact.o', 'w') {| outfile | outfile generator.write}
L'API compilatore Voodoo che è disponibile per i programmi di Ruby è descritto nella documentazione API
Cosa c'è di nuovo in questa versione:.
- < li> Compatibilità con rubino 1.9, oltre a rubino 1.8; make test riporta oggi il numero dei test passati e falliti.
- Il test molti-vars è stato suddiviso in molti-args, molti-args-coda, e molti-locali.
Cosa c'è di nuovo nella versione 1.0.1:
- Questa versione aggiunge una serie di miglioramenti al parser , che ora riporta posizioni codice sorgente di tutti gli errori e può segnalare errori multipli all'interno di blocchi, funzioni e condizionali. Sono stati aggiunti diversi test per il parser.
- Questa release corregge un errore di analisi sulle dichiarazioni seguite da commenti e un problema che ha causato il parser di fallire su input vuoto.
Cosa c'è di nuovo nella versione 1.0.0:
- generatore di codice ARM: Il compilatore ora in grado di generare il montaggio e codice oggetto ELF per l'architettura ARM.
- Migliorata segnalazione di errore:. Vengono rilevati più errori, e gli errori sono riportati in più facile capire i messaggi di errore
- Validator: questo nuovo modulo può essere utilizzato per convalidare il codice generato Voodoo. E 'utilizzato dal parser per convalidare il codice analizzata.
- Interfaccia Feature: caratteristiche di attuazione può essere interrogato sia a livello di programmazione e dalla riga di comando .
Modulo
Cosa c'è di nuovo nella versione 0.7.0:
- blocchi: questi forniscono ambiti in cui le variabili locali possono essere definita con let. Tali variabili esistono dalla fine dell'istruzione let fino alla fine del blocco. I blocchi possono verificarsi in qualsiasi luogo in cui potrebbe essere un'azione. Si sono avviati con il blocco e si è conclusa con blocco finale.
- Condizioni in serie: è ora possibile scrivere & quot; else if & quot ;, invece di richiedere un nidificato se nella clausola else .
- Maiusc e ruotare: azioni di trasferimento (asr, BSR, SHL, SHR) (rol, ROR) sono stati aggregati e ruotare azioni .
- Ritorna senza valore: di ritorno può ora essere utilizzato senza specificare una espressione da valutare. Questo provoca un valore indefinito per essere restituito dalla funzione.
Cosa c'è di nuovo nella versione 0.6.3:
- Questa versione introduce al-espressioni: anteponendo un etichetta, variabile locale, o un numero intero con una @, il valore viene trattato come un indirizzo, e la parola conservati a tale indirizzo viene restituito.
- Inoltre, alcuni bug sono stati scoperti nelle stringhe modo sono stati codificati in codice assembly generato.
- Questi bug sono stati corretti, e la versione 0.6.3 ora gestisce stringhe contenente correttamente tutti i 256 possibili valori di byte.
Cosa c'è di nuovo nella versione 0.6.2:
- Questa release corregge bug nelle implementazioni di impostazione parola per i386 e AMD64 e aggiunge i test per i casi che in precedenza non hanno funzionato correttamente.
I commenti non trovato