Module parse

Source
Expand description

A parser for selection expressions in a compact textual syntax.

See [selection::parse] for syntax details and examples. This module defines a parser of a compact syntax used to describe hierarchical selections over multidimensional meshes.

expression       ::= union
union            ::= intersection ( "|" intersection )*
intersection     ::= chain ( "&" chain )*
chain            ::= group ( "," group )*
group            ::= range
                   | index
                   | wildcard
                   | any
                   | "(" expression ")"
range            ::= number? ":" number? ( ":" number )?
index            ::= number
wildcard         ::= "*"
any              ::= "?"
number           ::= [0-9]+

Notes:

  • , separates nested dimensions (i.e., descent into next dimension).
  • | is union, & is intersection. & binds tighter than |.
  • * selects all values at the current dimension and descends.
  • ? selects a random value at the current dimension and descends.
  • A range like 2:5:1 has the form start:end:step. Missing parts default to:
    • start = 0
    • end = full extent
    • step = 1
  • An index like 3 is shorthand for the range 3:4.
  • Parentheses () allow grouping for precedence control and nesting of chains.
  • Whitespace is not allowed (although the parse function will admit and strip it.)
  • Expressions like (*,*,1:4|5:6) are valid and parsed as:
    • A union of two expressions:
      1. The chain *,*,1:4
      2. The standalone 5:6
    • The union applies at the top level, not just within a dimension.
    • To apply the union only to the third dimension, parentheses must be used: e.g., *,*,(1:4|5:6)

Functionsยง

expression
parse
Parses a selection expression from a string, ignoring all whitespace.