[.. X] -> [.., end_group(i)]
[..]
[..]
[..]
[..]
[..]
[.., Void] -> [.., TRUE]
[.., X] -> [.., true or X]
[.., X] -> [.., X or true]
if is_greedy then [.., X] -> [.., X or true] else [.., X] -> [.., true or X]
if is_greedy then Result = (X or true) else Result = (true or X)