ometa IndirectLeftRecursion <: Parser { digit = char:d ?(d >= '0' && d <= '9') -> d.digitValue(), number = number:n digit:d -> (10*n + d) | digit, x = term, term = x:t "+" number:n -> ['Add', t, n] | number } IndirectLeftRecursion.matchAll('1+2+3', 'term') // I would expect [Add, [Add, 1, 2], 3] as a result instead of 1