Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

48 Commits

Repository files navigation

bnf_rules!

LR(1) parser generator

Generate LR(1) parser at compilation time.

use bnf_rules::bnf_rules_macro::bnf_rules;// Grammarbnf_rules!(
source ::= expr
expr ::= factor {"+" factor }
factor ::= "-" primary | primary
primary ::= "(" expr ")" | number
number ::= r"\d+"// regex);pubfnparse(){// A function named "parse_source" is automatically generated.let ast_node:Result<ASTNode,ParseError> = parse_source("(100 + 200) + -100");dbg!(ast_node.unwrap());}

Usage

bnf_rules = "0.1.7"

Extended BNF

FormSemantic
sourceAn entire input source.
identA non-terminal symbol named "ident".
"something"A terminal symbol for text.
r"\d+"A terminal symbol for regex.
fn (function_name)A custom tokenizer with user function.1
{ pattern }Zero or more repetitions of "pattern".
[ pattern ]"pattern" or null.
pattern1 | pattern2"pattern1" or "pattern2".
( patterns )A group of patterns.

Example 1: https://github.com/bea4dev/bnf_rules/blob/master/src/lib.rs

Example 2: https://github.com/bea4dev/catla/blob/master/catla_parser/src/grammar.rs

Footnotes

  1. Generic parameters are also available.

About

LR(1) parser generator

Topics

Resources

Stars

9 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages