Voodoo Compiler es una implementación del lenguaje de programación Voodoo & nbsp;. El lenguaje de programación vudú es un lenguaje de programación de bajo nivel, la abstracción sobre la instrucción de la plataforma de establecer y convenciones de llamada, pero por lo demás dejando al programador libre de hacer nada en absoluto.
Voodoo compilador está escrito en Ruby y genera código para compatible con i386, AMD64 y CPUs MIPS. Soporte para CPUs objetivo adicional se planea para el futuro.
Uso
Hay dos formas principales de usar el compilador Voodoo: ejecutando el programa voodooc, o mediante el uso de la API de Ruby.
El programa voodooc compila unos archivos de origen del vudú. Su uso se describe en la página de manual voodooc.1, incluido en la distribución. El siguiente es un ejemplo de cómo voodooc se puede utilizar para crear un hola ejecutable desde un hello.voo archivo fuente:
$ Voodooc hello.voo
$ Cc hello.o -o hola
$ ./hola
Hola mundo!
Una implementación de hello.voo se puede encontrar en la prueba de directorio de la distribución.
La segunda manera de utilizar el compilador vudú es usándolo desde un programa de Ruby. Esto se puede utilizar, por ejemplo, para generar código para la plataforma de destino sin tener que crear un archivo .voo. El siguiente es un ejemplo que crea un archivo objeto llamado fact.o, que contiene una definición de un hecho de la función que calcula factoriales:
require 'vudú'
generador = Voodoo :: CodeGenerator.get_generator: arquitectura =>: i386,
& Nbsp;: format =>: Duende
generator.export: hecho
generator.add_function_label: hecho
generator.add_function [: n],
& Nbsp; [: IFLE, [n, 1],
& Nbsp; # después
& Nbsp; [[: la devolución, 1]],
& Nbsp; # otra cosa
& Nbsp; [[: dejar,: x,: sub, n, 1],
& Nbsp; [: set: x,: llamar,: hecho,: x],
& Nbsp; [: retorno,: mul, n,: x]]]
File.open ('fact.o', 'w') {| archivosalida | archivosalida generator.write}
El API compilador vudú que es una disposición de los programas de Ruby se describe en la documentación de la API
¿Qué hay de nuevo en esta versión:.
- < li> Compatibilidad con Ruby 1.9, además de Rubí 1,8; hacer prueba ahora informa del número de pruebas pasadas y fallidas.
- La prueba de muchos vars se ha dividido en muchos-args, muchos-args-cola, y muchos-residentes.
¿Cuál es nuevo en la versión 1.0.1:
- Esta versión añade una serie de mejoras para el analizador , que ahora informa ubicaciones de código fuente para todos los errores y puede reportar múltiples errores dentro de los bloques, las funciones y los condicionales. Se han añadido varias pruebas para el analizador.
- Esta versión corrige un error de análisis en declaraciones seguidas de comentarios y un problema que causó el analizador falle en la entrada vacía.
¿Qué hay de nuevo en la versión 1.0.0:
- generador de código ARM: El compilador ahora puede generar montaje y el código objeto ELF para la arquitectura ARM.
- Error de Mejoramiento de los informes:. Más errores se detectan, y los errores se presentan en más fácil de entender los mensajes de error
- Validador: este nuevo módulo puede ser utilizado para validar el código generado Voodoo. Es utilizado por el analizador para validar código analizada.
- interfaz de funciones: funciones de la aplicación se puede consultar tanto en programación y desde la línea de comandos .
Módulo
¿Cuál es nuevo en la versión 0.7.0:
- Bloques: proporcionan ámbitos en los que las variables locales pueden definir con let. Existen Tales variables desde el final de la instrucción let hasta el final del bloque. Los bloques pueden ocurrir en cualquier lugar en el que se puede producir una acción. Se inician con el bloque y terminaron con el bloque final.
- Condiciones encadenadas: ahora es posible escribir & quot; más si & quot ;, en lugar de exigir un anidada si en la cláusula else .
- de desplazamiento y rotación: acciones de transferencia (asr, BSR, SHL, SHR) (rol, ROR) se han añadido y girar acciones .
- Vuelta sin valor: retorno puede ahora utilizarse sin especificar una expresión a evaluar. Esto hace que un valor no definido que se devuelve desde la función.
¿Qué hay de nuevo en la versión 0.6.3:
- Esta versión introduce en-expresiones: Por un prefijo etiqueta, variable local o entero con signo @, el valor se trata como una dirección, y la palabra almacenada en esa dirección se devuelve.
- Además, algunos errores fueron descubiertos en la forma en que las cadenas se codifica en código ensamblador generado.
- Estos errores han sido corregidos, y la versión 0.6.3 ahora maneja cadenas que contengan correctamente todos los 256 posibles valores de bytes.
¿Qué hay de nuevo en la versión 0.6.2:
- Esta versión corrige errores en las implementaciones de ajuste palabra para i386 y AMD64 y agrega pruebas para los casos que antes no funcionan correctamente.
Comentarios que no se encuentran