public IParseTreeValue CreateExpression(string expression, string declaredTypeName)
 {
     if (expression is null || declaredTypeName is null)
     {
         throw new ArgumentNullException();
     }
     return(ParseTreeValue.CreateExpression(new TypeTokenPair(declaredTypeName, expression)));
 }
        public IParseTreeValue Create(string valueToken)
        {
            if (valueToken is null || valueToken.Equals(string.Empty))
            {
                throw new ArgumentException();
            }

            if (HasTypeHint(valueToken, out string valueType))
            {
                var vToken = valueToken.Remove(valueToken.Length - 1);
                var conformedTypeTokenPair = TypeTokenPair.ConformToType(valueType, vToken);
                if (conformedTypeTokenPair.HasValue)
                {
                    return(ParseTreeValue.CreateValueType(conformedTypeTokenPair));
                }
                return(ParseTreeValue.CreateExpression(new TypeTokenPair(valueType, vToken)));
            }

            if (TypeTokenPair.TryParse(valueToken, out TypeTokenPair result))
            {
                return(ParseTreeValue.CreateValueType(result));
            }
            return(ParseTreeValue.CreateExpression(new TypeTokenPair(null, valueToken)));
        }