Salida pypreprocessor
también se puede conocer en PYPI (Python Package Index) por lo que puede ser descargado directamente a través de la pipa.
Si está buscando utilizar sentencias #define y #ifdef para realizar una compilación condicional simple, debería satisfacer sus necesidades. Puede ejecutarlo como una secuencia de comandos independiente y especificar un archivo de entrada (que puede estar en cualquier idioma) para procesar o puede importarlo como un módulo de python y usarlo para autoconsumir la fuente de Python.
pypreprocessor hace no apoyo:
- macro reemplazo
operaciones
- lógicos (. Ie || & &)
- operaciones matemáticas (. Ie + - * /)
- preprocesador de líneas múltiples directivas
Es una herramienta diseñada específicamente para compilación condicional, no metaprogramación.
Aquí hay un ejemplo de cómo procesar un archivo C utilizando pypreprocessor como un proceso independiente:
from pypreprocessor import pypreprocessor
pypreprocessor.defines.append('debug')
pypreprocessor.input = 'input_file.c'
pypreprocessor.output = 'output_file.c'
pypreprocessor.removeMeta = True
pypreprocessor.parse()
La aplicación es bastante simple.
defines.append ('debug'):
tiene el mismo efecto que la adición de una directiva 'depuración #define' en el fichero. Esta es solo una forma conveniente de establecer define.
pypreprocessor.input = 'input_file.c':
Establece el archivo que desea procesar.
pypreprocessor.output = 'output_file.c':
Conjuntos donde está el archivo de salida a.
pypreprocessor.removeMeta = True:
Elimina todas las directivas del preprocesador que se encuentran en el archivo. Esto incluye todos los #define, #ifdef, #undefine, #else, etc. del archivo fuente. Esto es útil para crear una versión de producción "limpia" de la fuente menos todos los códigos condicionales y las directivas que no se utilizan. Este paso también es completamente opcional. Si no agrega esto, cualquier código que no entre en una condición definida se comentará automáticamente.
Por ejemplo:
#define debug
#ifdef debug
print('this will appear in the postprocessed code')
#else
#print('this will be commented out in the postprocessed code')
#endif
Si usted necesita el reemplazo macro para, por ejemplo, cambiar la fuente de un idioma a otro pyprocessor no soporta esto todavía. En teoría, no requeriría mucho trabajo agregar, pero el lexer tendría que extenderse primero para omitir las palabras clave que aparecen en las cadenas de texto.
SideNote: También es compatible con python2x y python3k.
Descargo de responsabilidad: soy el autor de pypreprocessor.
"Una herramienta externa de CPP" normalmente se integra en el compilador. ¿Para qué necesitas esto? –
Eso parece mucho trabajo para poco beneficio. ¿Por qué sería esto importante? –
** Puedes ** implementarlo siempre tú mismo: el preprocesador es extremadamente simple (de hecho, creo que es regular, por lo que ni siquiera necesitarías gramáticas libres de contexto para interpretarlo). –