//--------------------------------------------------------------------- public void Visit(RightParanthesis paranthesis) { this.CheckIntrinsic(paranthesis); if (_paranthesisStack.Count == 0 || !(_paranthesisStack.Peek() is LeftParanthesis)) { throw ParsingException.NoLeftParanthesis(paranthesis); } _paranthesisStack.Pop(); _lastToken = paranthesis; }
//--------------------------------------------------------------------- public void Visit(RightParanthesis paranthesis) { this.EvaluateWhile(() => _operationStack.Count > 0 && !(_operationStack.Peek() is LeftParanthesis)); _operationStack.Pop(); if (_intrinsicStack.Count > 0) { Intrinsic intrinsic = _intrinsicStack.Pop(); Expression arg = _expressionStack.Pop(); Expression res = intrinsic.Apply(arg); _expressionStack.Push(res); } _lastToken = paranthesis; }
//--------------------------------------------------------------------- internal static ParsingException NoLeftParanthesis(RightParanthesis rightParanthesis) { string msg = $"No left parenthesis that matches the right paranthesis at position {rightParanthesis.Position}."; return(new ParsingException(msg)); }