public IParseNode Parse(TokenWalker walker) { Debug.Assert(TermParser != null); IParseNode result; if (walker.NextIs <MinusToken>()) { var lexem = walker.Pop(); result = new UnaryMinusOperator(TermParser.Parse(walker), lexem.Position); } else { result = TermParser.Parse(walker); } while (walker.NextIsLineOperator()) { var lexem = walker.Pop(); result = lexem.Token switch { MinusToken _ => new MinusOperator(result, TermParser.Parse(walker), lexem.Position), PlusToken _ => new PlusOperator(result, TermParser.Parse(walker), lexem.Position), _ => result }; } return(result); } }
public void Visit(UnaryMinusOperator op) { op.Operand.Accept(this); _stack.Push(-_stack.Pop()); }
public void Visit(UnaryMinusOperator op) { Visit((UnaryOperator)op); }
public void Visit(UnaryMinusOperator op) { _resultBuilder.AppendFormat("-"); op.Operand.Accept(this); }