/// <summary>
        /// Parse source id
        /// </summary>
        /// <param name="text">Text to parse</param>
        /// <exception cref="InvalidSemanticItemException"></exception>
        /// <exception cref="NotEnoughDataException"></exception>
        /// <returns>Parsed source</returns>
        public FormulaItem Parse(string text)
        {
            var words = text.Split(new char[] { ' ', '\n' }).Select(w => new Token()
            {
                Data = w
            }).ToList();
            var builder = new FormulaItemBuilder(_model);

            foreach (var token in words)
            {
                if (!builder.TryAddWord(token))
                {
                    throw new InvalidSemanticItemException(_model, token.Data);
                }
            }

            var res = builder.Build();

            res.UsersInput = text;
            return(res);
        }
        public Condition Build()
        {
            var res = new Condition()
            {
                Conditions = new List <Condition>(),
                Arg1       = _firstArgumentBuilder.Build()
            };

            if (!IsBoolParameter(res.Arg1))
            {
                res.Arg2          = _secondArgumentBuilder.Build();
                res.ConditionType = _operationBuilder.Build();
            }
            else
            {
                res.Arg2 = new FormulaItem()
                {
                    ValueType = FormulaItem.VALUE,
                    Value     = "true"
                };
                res.ConditionType = Condition.EQ;
            }
            return(res);
        }