Asparserations
Asparserations is an LR(1) and LALR(1) parser generator frontend. It outputs JSON representing the parse table.
Install / Use
/learn @alan-j-hu/AsparserationsREADME
Asparserations
Asparserations is an LR(1) parser generator frontend written in C++. It outputs JSON representing the state machine table. A C++ backend, used to generate the grammar parser, is included in the bootstrap folder.
Features
- Outputs JSON for consumption by backends, without needing to implement the [LA]LR(1) table construction algorithm
- Productions are named instead of indexed and names are local to the nonterminal
- Preserves shift/reduce and reduce/reduce conflicts in JSON
- Used to generate the parser for grammar files
- Can be integrated with lexers easily (the grammar file lexer is lazy/a generator/monadic!)
Options
--version,-v- Prints the software version--help,-h- Prints the help--out,-o- Specifies the output file (a.out.json by default)--root,-r- Specifies the root node (Root by default)--lalr,-l- Use LALR(1) (experimental)--debug,-d- Output the item sets as well as the states
Building From Source
Prerequisites
This project requires G++, GNU Make, and Python 3 in order to build from source.
Installing
$ git clone https://github.com/TheAspiringHacker/Asparserations.git
$ cd Asparserations
$ make install
The binary file is saved to ~/local/bin and can be invoked by typing
asparserations [flags...] grammar_file_name.
Installing with CMake
I've decided to learn CMake by using it for this project. Use it by running:
$ git clone https://github.com/TheAspiringHacker/Asparserations.git
$ cd Asparserations
$ mkdir build
$ cd build
$ cmake ../
$ make
The resulting binary is build/bin/asparserations.
You can then run CPack:
$ cpack --config CPackConfig.cmake
(You will have to move the binary to a location in your PATH yourself.)
Trying it out
Create a file called grammar in your favorite text editor:
tokens {
number,
plus,
minus,
asterisk,
slash
}
Term : Term plus Factor # add
| Term minus Factor # sub
| Factor # base_case
;
Factor : Factor asterisk number # mult
| Factor slash number # div
| number # base_case
;
Run:
$ asparserations -r Term -o table.json grammar
$ cat table.json
Related Skills
node-connect
341.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
341.8kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.6kCommit, push, and open a PR
