public override Value Evaluate() { var stack = State.Stack; var right = stack.Pop(true, LOCATION); var left = stack.Pop(false, LOCATION); Alternation alternation; if (left.Type == Value.ValueType.Alternation) { if (left is Variable) { left = left.Resolve(); } alternation = left as Alternation; alternation.Add(right); return(left); } alternation = new Alternation(); alternation.Add(left); alternation.Add(right); return(alternation); }