commit all archived files
This commit is contained in:
parent
b06347d1f4
commit
1b2dbd13b4
42
README.md
Normal file
42
README.md
Normal 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)*
|
||||
|
BIN
dist-archive/plexus-0.32.zip
Normal file
BIN
dist-archive/plexus-0.32.zip
Normal file
Binary file not shown.
BIN
doc/sample.png
Normal file
BIN
doc/sample.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
Reference in New Issue
Block a user