Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/teliosdev/preproc
https://github.com/teliosdev/preproc
Last synced: 1 day ago
JSON representation
- Host: GitHub
- URL: https://github.com/teliosdev/preproc
- Owner: teliosdev
- License: mit
- Created: 2023-08-12T10:16:25.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-10-22T07:00:01.000Z (about 1 year ago)
- Last Synced: 2023-10-22T09:46:57.711Z (about 1 year ago)
- Language: Rust
- Size: 37.1 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PreProc
**PreProc** is a command line tool to run preprocessor directives in a file.
It's pretty simple, and is meant to be an analogue to the C preprocessor; but
less fixated on C.## Usage
```
preproc [options] -o
```The `` is the file to run the preprocessor on. The `-o` option
specifies the output file. If the output file is not specified, the output will
be written to stdout.The input file should be a UTF-8 text file. Each line is processed separately;
if the line starts with a preprocessor directive prefix, the line is parsed
as a preprocessor directive. Otherwise, the line is written to the output
file. The preprocessor directive prefix is `#` by default, though is
determined by the file extension, but can be changed with the `-c`/`--comment`
option.There are two main tables of values: the definition table, and the replacement
table. The definition table is a table of variables and their values, when
used in expressions. The replacement table is a table of variables and their
values, and the corresponding patterns in the non-directive text are replaced
with the value of the variable. By default, definitions are not replacements;
however, you can declare a replacement with `#replace`.The current available preprocessor directives are:
- `#if `: If the expression evaluates to true, the following lines
are passed through. Otherwise, they are ignored.
- `#elsif `: If all of the previous `#if` or `#elsif` evaluated to
false, and this expression evaluates to true, the following lines are
passed through. Otherwise, they are ignored.
- `#else`: If all of the previous `#if` or `#elsif` evaluated to false,
the following lines are passed through. Otherwise, they are ignored.
- `#endif`: Ends the previous `#if`, `#elsif`, or `#else` block.
- `#replace `: Replaces all instances of `name` with the value of
the variable `name`. If the variable is not defined, it is replaced
with the empty string.
- `#replace `: Replaces all instances of `name` in the text
with the value of the expression `expr`. If the expression cannot be
evaluated, it is replaced with the empty string.
- `#unrep `: Stops substitution of `name` in the current scope.
- `#define `: Defines the variable `name` to be the value
of the expression `expr`. If the expression cannot be evaluated, the
variable is set to null.
- `#error `: Marks the current line as an error. If the expression
cannot be evaluated, the error is marked as `null`. This will cause
the preprocessor to exit with an error code, after processing the whole
file.## Examples
To demonstrate the definitions and replacements as expressed above, an example
input file is:```
#define WORLD "world"
hello, WORLD!
#replace WORLD
hello, WORLD!
#replace WORLD null
hello, WORLD!
```The output of processing this file is:
```
hello, WORLD!
hello, world!
hello, !
```# Why?
Because.
I wanted to write it.
# Is it any good?
Yes.