I don't think it's possible, actually. By using pars, you force non-standard operator (let's assume : could be an operator) precedence. Then, it's possible for ? to just eat an untyped block, not caring too deeply about whenever : is really an operator or not. But without pars, things are different.
The only thing I can think of is using a visually similar cond ? x ::: y and then: macro `:::`(a, b): untyped = a.expectKind nnkInfix a.expectLen 3 assert $(a[0].ident) == "?" let cond = a[1] let lhs = a[2] let rhs = b template impl(a,b,c) = # here comes your implementation # I'll just use if-else as an example if a: b else: c result = getAst(impl(cond,lhs,rhs)) # example usage let a = 7 b = 3 x = (a > b ? a ::: b) echo x