//--------------------------------------------------------------------- public void Validate() { if (_paranthesisStack.Count > 0) { Paranthesis paranthesis = _paranthesisStack.Pop(); throw ParsingException.ParanthesisNotMatched(paranthesis); } }
//--------------------------------------------------------------------- private void CheckIntrinsic(Token current) { if (!(_lastToken is Intrinsic) || current is LeftParanthesis) { return; } throw ParsingException.IntrinsicNoFollowedByLeftParanthesis(_lastToken as Intrinsic); }
//--------------------------------------------------------------------- public void Visit(ValueToken valueToken) { this.CheckIntrinsic(valueToken); if (_lastToken is ValueToken) { throw ParsingException.ValueFollowedByValue(_lastToken as ValueToken, valueToken); } _lastToken = valueToken; }
//--------------------------------------------------------------------- public void Visit(Operation operation) { this.CheckIntrinsic(operation); if (_lastToken is Operation && !(operation is Exponentation)) { throw ParsingException.OperationFollowedByOperation(_lastToken, operation); } _lastToken = operation; }
//--------------------------------------------------------------------- public void Visit(RightParanthesis paranthesis) { this.CheckIntrinsic(paranthesis); if (_paranthesisStack.Count == 0 || !(_paranthesisStack.Peek() is LeftParanthesis)) { throw ParsingException.NoLeftParanthesis(paranthesis); } _paranthesisStack.Pop(); _lastToken = paranthesis; }