Skip to content

Extensible block-based preprocessor written in Python

License

Notifications You must be signed in to change notification settings

Intuity/prologue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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:https://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 [email protected]: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

About

Extensible block-based preprocessor written in Python

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages