Skip to main content

General purpose preprocessor written in Python

Project description

Prologue

Tests

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 undeclared
  • if/elif/else/endif - conditional inclusion of blocks of text/other preprocessor directives
  • ifdef/ifndef/else/endif - test whether constants are defined or undefined
  • for/endfor - repeat a block of text for a number of iterations, can also iterate through an array
  • info/warning/error - print messages to a log, or raise an exception, from a directive
  • include/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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

prologue-1.2.tar.gz (24.3 kB view details)

Uploaded Source

Built Distribution

prologue-1.2-py3-none-any.whl (36.5 kB view details)

Uploaded Python 3

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

Hashes for prologue-1.2.tar.gz
Algorithm Hash digest
SHA256 b1728764106a41e5d8f6898b984aba5d4a12343c633427bd90d91a565ee80925
MD5 2d5376c866a3610a8b34764456f58839
BLAKE2b-256 db0f2bd6b9e91efe6ea424de80f240ebda8f85bf190266925381ec10c96659c8

See more details on using hashes here.

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

Hashes for prologue-1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d34032072a2d6ea87d54e9a49ebb282ee6aa3498395ce6e606f749ed9c50c86d
MD5 e81ee1e728ccda35b44117687972c4c0
BLAKE2b-256 32cde2945967c72a5a32753fc59d9e1ba1306f80ad112a7b4d99060bd86fabb5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page