Skip to main content

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