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.1.tar.gz (23.8 kB view details)

Uploaded Source

Built Distribution

prologue-1.1-py3-none-any.whl (36.0 kB view details)

Uploaded Python 3

File details

Details for the file prologue-1.1.tar.gz.

File metadata

  • Download URL: prologue-1.1.tar.gz
  • Upload date:
  • Size: 23.8 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.1.tar.gz
Algorithm Hash digest
SHA256 5dd1c5b1589dad378e55272a9c6336091f46c47e1203d2902a2350421cc42aa9
MD5 500132d99993ebfe05dd982ce1b2914c
BLAKE2b-256 f6538113b04bd02e3116dbcd8c07e1d5074bf44758a0a334c0b972f34b30b098

See more details on using hashes here.

File details

Details for the file prologue-1.1-py3-none-any.whl.

File metadata

  • Download URL: prologue-1.1-py3-none-any.whl
  • Upload date:
  • Size: 36.0 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e00bdfd34810278101977063b14140328a488a755563d7097fca9f0feb6c9ee7
MD5 2c4efea282fff883d882b404de49afb4
BLAKE2b-256 88d75f74316ca76fc7d2e8b78313554013236876109dce4ef4d1ed14349ad3d1

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