LALR(1) parser generator for Rust based on Lemon + SQL parser
Rust
65
542 commits
updated Sep 5, 2026
LEMON parser generator modified to generate Rust code.
Lemon source and SQLite3 grammar were last synced as of April 2026.
%token_destructor: Code to execute to destroy token data%default_destructor: Code for the default non-terminal destructor%destructor: Code which executes whenever this symbol is
popped from the stack during error processinghttps://www.codeproject.com/Articles/1056460/Generating-a-High-Speed-Parser-Part-Lemon https://www.sqlite.org/lemon.html
SQLite lexer and SQLite parser have been ported from C to Rust. The parser generates an AST.
Lexer/Parser:
Lexer and parser have been tested with the following scripts:
TODO:
#line directiveParseAlloc/ParseFree anymore%extra_argument is not supported.lemon_rust does the same thing
but with an old version of lemon. And it seems not possible to use yystack
as a stack because items may be access randomly and the top+1 item can be used.
lalrpop would be the perfect alternative but it does not support fallback/streaming (see this issue) and compilation/generation is slow.
Latest stable Rust version at the time of release. It might compile with older versions.
490 followers · starred Apr 2025
105 followers · starred May 2024
32 followers · starred Jul 2024
499 followers · starred Sep 2022
Rust
78.7%
Yacc
21.3%
LALR(1) parser generator for Rust based on Lemon + SQL parser
Rust
65
542 commits
updated Sep 5, 2026
LEMON parser generator modified to generate Rust code.
Lemon source and SQLite3 grammar were last synced as of April 2026.
%token_destructor: Code to execute to destroy token data%default_destructor: Code for the default non-terminal destructor%destructor: Code which executes whenever this symbol is
popped from the stack during error processinghttps://www.codeproject.com/Articles/1056460/Generating-a-High-Speed-Parser-Part-Lemon https://www.sqlite.org/lemon.html
SQLite lexer and SQLite parser have been ported from C to Rust. The parser generates an AST.
Lexer/Parser:
Lexer and parser have been tested with the following scripts:
TODO:
#line directiveParseAlloc/ParseFree anymore%extra_argument is not supported.lemon_rust does the same thing
but with an old version of lemon. And it seems not possible to use yystack
as a stack because items may be access randomly and the top+1 item can be used.
lalrpop would be the perfect alternative but it does not support fallback/streaming (see this issue) and compilation/generation is slow.
Latest stable Rust version at the time of release. It might compile with older versions.
490 followers · starred Apr 2025
105 followers · starred May 2024
32 followers · starred Jul 2024
499 followers · starred Sep 2022
Rust
78.7%
Yacc
21.3%