@top Filter { expression* }
expression { FilterStatement | space }
FilterStatement { FilterKey space* FilterValue }
FilterKey { Identifier }
FilterValue { (PositionOperator? Identifier PositionOperator?) | Boolean }
Boolean { @specialize<Identifier, "true" | "false"> }
@tokens {
space { @whitespace }
escapedCharacter { "\\" _ }
PositionOperator { "*" }
Identifier { (escapedCharacter | ![ ,])* (![ *,)] | escapedCharacter) }
@precedence { space, PositionOperator, Identifier }
}