commit all archived files

This commit is contained in:
mappu 2017-03-12 00:00:00 +00:00
parent b06347d1f4
commit 1b2dbd13b4
3 changed files with 42 additions and 0 deletions

42
README.md Normal file
View File

@ -0,0 +1,42 @@
# plexus
![](https://img.shields.io/badge/written%20in-Go-blue)
A table-driven parser/lexer with no precompilation phase.
Tags: PL
`plexus` is a minimal recursive descent parser and lexer that works entirely at runtime. Enter your grammar using a BNF-like syntax directly into a `map`. The parse function takes the grammar map and your source code as input, to return a tree of nodes. No DFA/NFA lifting is performed.
Rules can be used to customise the capture behaviour. Taking `FOO => BAR BAZ QUUX` as an example, a `FOO` node would only be created if all three child nodes could be parsed sequentially. By adding an RT_RULE into the list, this behaviour can be changed. For instance, `FOO => BAR RT_RULE_ONE_OF_THE_REMAINING BAZ QUUX` will match `BAR BAZ` and `BAR QUUX`. Various rules are supported to emulate plus, star, and optional groupings. Certain types of lookahead can be implemented via the `RT_RULE_NONE_OF_THE_REMAINING` rule. There is no support for backtracking.
By default, the parser skips `\s\t\r\n` characters in-between other tokens; but this can be overwritten at any time via the `WHITESPACE` rule, which specifies the character set to skip.
The project also includes `bnf2plexus`, a program that uses `plexus` to parse grammars in (E)BNF syntax, compiling the resulting AST into Go source code targeting the `plexus` library. At the time of writing, the BNF support was sufficiently complete to compile Python's upstream grammar file into a `plexus` parser.
This is an extended, standalone, Golang version of the C++ parser used by the [pexl-D](https://code.ivysaur.me/pexl-D/) compiler.
## Usage (library)
See `plexus_test.go` for a simple example of parsing arithmetic expressions.
See `cmd/bnf2plexus/bnfparse.go` for a more complex example of parsing BNF using custom rules.
## Usage (bnf2plexus)
```
Usage of bnf2plexus:
--input filename
```
Output is written to `stdout`.
## Changelog
2017-03-12 0.32
- Initial public release
- [⬇️ plexus-0.32.zip](dist-archive/plexus-0.32.zip) *(7.48 KiB)*

Binary file not shown.

BIN
doc/sample.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB