Schau dir pypreprocessor an
Es ist auch auf PYPI (Python Package Index) zu finden, sodass es direkt mit pip heruntergeladen werden kann.
Wenn Sie #define und #ifdef-Anweisungen verwenden möchten, um einfache bedingte Kompilierung durchzuführen, sollte dies Ihren Anforderungen entsprechen. Sie können es entweder als eigenständiges Skript ausführen und eine Eingabedatei (die in jeder Sprache vorliegen kann) angeben oder Sie können es als Python-Modul importieren und es zum Selbstverzehr von Python-Quellcode verwenden.
pypreprocessor unterstützt nicht:
- Makroersetzungen
- Logische Operationen (d. h. || &&)
- Mathematische Operationen (d. h. + - * /)
- Mehrzeilige Präprozessoranweisungen
Es ist ein Werkzeug, das speziell für die bedingte Kompilierung entwickelt wurde, nicht für Metaprogrammierung.
Hier ist ein Beispiel, wie Sie eine C-Datei mit pypreprocessor als eigenständiges Skript verarbeiten können:
from pypreprocessor import pypreprocessor
pypreprocessor.defines.append('debug')
pypreprocessor.input = 'input_file.c'
pypreprocessor.output = 'output_file.c'
pypreprocessor.removeMeta = True
pypreprocessor.parse()
Die Implementierung ist ziemlich einfach.
defines.append('debug'):
Hat die gleiche Wirkung wie das Hinzufügen einer '#define debug'-Direktive zur Datei. Dies ist nur eine bequeme Möglichkeit, defines festzulegen.
pypreprocessor.input = 'input_file.c':
Legt die Datei fest, die Sie verarbeiten möchten.
pypreprocessor.output = 'output_file.c':
Legt fest, wohin die Datei ausgegeben wird.
pypreprocessor.removeMeta = True:
Entfernt alle im File gefundenen Präprozessoranweisungen. Dies umfasst alle #define, #ifdef, #undefine, #else usw. aus der Quelldatei. Dies ist nützlich, um eine 'saubere' Produktionsversion des Quellcodes zu erstellen, die alle bedingten Codes und Direktiven, die nicht verwendet werden, enthält. Dieser Schritt ist ebenfalls vollkommen optional. Wenn Sie dies nicht hinzufügen, wird automatisch jeglicher Code auskommentiert, der nicht in eine definierte Bedingung fällt.
Zum Beispiel:
#define debug
#ifdef debug
print('dies wird im nachbearbeiteten Code erscheinen')
#else
#print('dies wird im nachbearbeiteten Code auskommentiert werden')
#endif
Wenn Sie beispielsweise Makroersetzung benötigen, um z. B. Quelltext von einer Sprache in eine andere zu ändern, wird dies von pyprocessor noch nicht unterstützt. In der Theorie würde es nicht viel Arbeit erfordern, um dies hinzuzufügen, aber der Lexer müsste zuerst erweitert werden, um Schlüsselwörter zu überspringen, die innerhalb von Textzeichenfolgen erscheinen.
Anmerkung: Es ist auch mit python2x und python3k kompatibel.
Haftungsausschluss: Ich bin der Autor von pypreprocessor.