General purpose preprocessor written in Python
Project description
Prologue
Prologue is an extensible text preprocessor written in Python. It performs evaluation in a continuous stream, which allows it to run fast and keep a minimal memory footprint with few open file handles.
Directives can be easily added and removed to customise the behaviour of the preprocessor. By default the following directives are supported:
define/undef
- allows constants to be declared and undeclaredif/elif/else/endif
- conditional inclusion of blocks of text/other preprocessor directivesifdef/ifndef/else/endif
- test whether constants are defined or undefinedfor/endfor
- repeat a block of text for a number of iterations, can also iterate through an arrayinfo/warning/error
- print messages to a log, or raise an exception, from a directiveinclude/import
- allows other files to be included or imported (one time include) into the stream
Installation
The easiest way to install Prologue is to use PyPI:
$> python3 -m pip install prologue
Alternatively, you can install the latest version directly from this repository:
$> python3 -m pip install git+git://github.com/Intuity/prologue
Example
Input
#define MY_VAL 123
#undef MY_VAL
#define MY_VAL 256
int main() {
#if MY_VAL > 200
printf("Big value\n");
#else
printf("Small value\n");
#endif
}
Script
from prologue import Prologue
pro = Prologue()
pro.add_file("path/to/main.c")
for line in pro.evaluate("main.c"):
print(line)
Output
int main() {
printf("Big value\n");
}
Examples
A number of examples are available in the examples
folder:
demo
- is a demonstration of many features of Prologue, including loops, conditionals, include and import.c_style
- demonstrates how Prologue can be setup to act like GCC's preprocessor.verilog
- demonstrates how Prologue can be setup to act like a Verilog/SystemVerilog preprocessor.
Running Tests
Prologue comes with a suite of tests, which use pytest
for regression:
$> git clone git@github.com:Intuity/prologue
$> cd prologue
$> python3 setup.py test
Still To Do
Some features that still need to be implemented are:
- Support for C-style substitution delimiters to provide separation - for example
NUMBER_##A_CONST##_IS_THE_BEST
- Support for macro functions with nested support - for example
#define SUM(A, B) A + B
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file prologue-1.2.tar.gz
.
File metadata
- Download URL: prologue-1.2.tar.gz
- Upload date:
- Size: 24.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b1728764106a41e5d8f6898b984aba5d4a12343c633427bd90d91a565ee80925 |
|
MD5 | 2d5376c866a3610a8b34764456f58839 |
|
BLAKE2b-256 | db0f2bd6b9e91efe6ea424de80f240ebda8f85bf190266925381ec10c96659c8 |
File details
Details for the file prologue-1.2-py3-none-any.whl
.
File metadata
- Download URL: prologue-1.2-py3-none-any.whl
- Upload date:
- Size: 36.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d34032072a2d6ea87d54e9a49ebb282ee6aa3498395ce6e606f749ed9c50c86d |
|
MD5 | e81ee1e728ccda35b44117687972c4c0 |
|
BLAKE2b-256 | 32cde2945967c72a5a32753fc59d9e1ba1306f80ad112a7b4d99060bd86fabb5 |