Documentation Index
Fetch the complete documentation index at: https://docs.brim-lang.com/llms.txt
Use this file to discover all available pages before exploring further.
This page captures expression and pattern rules from grammar.ebnf.
Bindings and statements
Brim bindings use := and <-:
normal_binding = binding_mode? pattern type_annotation? ":=" expression ;
fallible_binding = pattern type_annotation? "<-" expression ;
binding_mode = "mut" | "view" "mut" | "view" | "own" ;
Statements:
statement = binding_stmt | assignment_stmt | expression_stmt | item ;
Expression entry points
expression = return_expr
| break_expr
| continue_expr
| if_expr
| match_expr
| loop_expr
| while_expr
| for_expr
| when_expr
| unless_expr
| guard_expr
| ensure_expr
| using_expr
| do_expr
| try_expr
| pipeline_expr ;
Precedence layers
The grammar defines a layered precedence model:
pipeline_expr = logical_or_expr { "|>" pipeline_stage } ;
logical_or_expr = logical_and_expr { "||" logical_and_expr } ;
logical_and_expr = equality_expr { "&&" equality_expr } ;
equality_expr = comparison_expr { ("==" | "!=") comparison_expr } ;
comparison_expr = range_expr { comparison_tail } ;
range_expr = additive_expr { (".." | "..=") additive_expr } ;
additive_expr = multiplicative_expr { ("+" | "-") multiplicative_expr } ;
multiplicative_expr = unary_expr { ("*" | "/" | "%") unary_expr } ;
Control expressions
if_expr = "if" expression block else_clause? ;
when_expr = "when" expression block ;
unless_expr = "unless" expression block ;
guard_expr = "guard" expression "else" block ;
ensure_expr = "ensure" expression "else" expression ;
loop_expr = "loop" loop_label? block ;
while_expr = "while" expression block ;
for_expr = "for" pattern "in" expression block ;
Match and patterns
match_expr = "match" expression block_open match_arm_list? block_close ;
match_arm = pattern match_guard? "=>" expression ;
match_guard = "if" expression ;
Pattern families:
basic_pattern = wildcard_pattern
| literal_pattern
| binding_pattern
| variant_pattern
| record_pattern
| tuple_pattern
| ref_pattern
| grouped_pattern ;
Notable forms include:
- OR patterns (
a | b)
as capture patterns (pat as name)
- variant payload matching
& and & mut reference patterns