expression function

Parser expression()

Optimized expression parser with proper precedence handling.

Precedence (lowest to highest):

  1. Named argument / Assignment (handled specially)
  2. Logical operators (and, or)
  3. Comparison operators (==, !=, <, >, <=, >=, contains, in)
  4. Arithmetic operators (+, -, *, /)
  5. Primary terms (identifiers, literals, etc.)

This avoids the repeated prefix parsing problem by parsing each precedence level once and reusing results.

Implementation

Parser expression() {
  return ref0(expressionWithAssignment).labeled('expression');
}