public ParserContext ParseUserInput(String input, ParserContext context = null)
        {
            var parts = input.Split(' ');
            var settings = Program.Settings;

            CurrentParserContext = context ?? CurrentParserContext;

            if (parts.Length == 0)
                return ParserContext.Empty;

            var firstCommand = parts[0];
            if(firstCommand.StartsWith("@"))
            {
                return ParseTime(firstCommand);
            }

            var userAction = settings.GetActionForShortcut(firstCommand);

            if(userAction == null)
            {
                return ParserContext.Empty;
            }

            CurrentParserContext.ContextAction = userAction;

            var inputSansAction = parts.Skip(1).ToArray();

            HandleAction(inputSansAction);
            HandleLocation(inputSansAction);
            HandleTime(inputSansAction);

            var returningContext = CurrentParserContext;
            CurrentParserContext = new ParserContext();
            return returningContext;
        }
 public ParserEngine()
 {
     CurrentParserContext = new ParserContext();
 }