示例#1
0
        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);
 }