expression function
Optimized expression parser with proper precedence handling.
Precedence (lowest to highest):
- Named argument / Assignment (handled specially)
- Logical operators (and, or)
- Comparison operators (==, !=, <, >, <=, >=, contains, in)
- Arithmetic operators (+, -, *, /)
- 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');
}