| Author here. Yes, technically this is a form of backtracking, similar to what a parser does. The key difference is that the search is drastically constrained by the type system: reductions are only attempted where the types actually support a binding operator. Unlike a parser exploring all grammar possibilities, this mechanism prunes most candidates automatically, so the compiler efficiently "solves" the expression rather than blindly exploring every syntactic alternative. Here is the high-level explanation of the mechanism: https://github.com/manifold-systems/manifold/tree/master/man... But the short answer is that it’s not parser-style backtracking over a grammar. The Java parser still produces a normal AST for the sequence of tokens. What happens afterward is a type-directed binding phase where adjacent expressions may bind if their types agree on a binding operator. The compiler effectively reduces the expression by forming larger typed expressions until it reaches a stable form. The algorithm favors left associativity, but since a type can implement the binding operator as either the left or right operand, the overall structure of the expression can emerge in different ways depending on the participating types. So rather than exploring grammar productions, the compiler is solving a set of type-compatible reductions across the expression. For example: 2026 March 10
reduces roughly like this: (2026 (March 10))
→ March.postfixBind(2026) // → LocalYearMonth
→ [retreat] // → no binding with 10
→ March.prefixBind(10) // → LocalMonthDay
→ .postfixBind(2026) // → LocalDate
And if `Month` binds with `Range<Integer>`: 2026 March 10 to 13
can reduce as: (2026 (March ((10 to) 13)))
The meaning is therefore determined entirely by which types participate in binding e.g., `LocalDate`, `Month`, `Integer`, `Range`, etc. and which reductions they define.If a competing interpretation exists but the types don’t support the necessary bindings, it simply never forms. In that sense it behaves less like a traditional parser and more like a typed reduction system layered on top of the Java AST. |