class ExpressionResolver {

	public List<ResolvedExpression> resolve(List<Expression> expressions) {
		final Function<List<Expression>, List<Expression>> resolveFunction =
			concatenateRules(getAllResolverRules());
		final List<Expression> resolvedExpressions = resolveFunction.apply(expressions);
		return resolvedExpressions.stream()
			.map(e -> e.accept(VERIFY_RESOLUTION_VISITOR))
			.collect(Collectors.toList());
	}

	private  ExpressionResolver(
			TableConfig config,
			TableReferenceLookup tableLookup,
			FunctionLookup functionLookup,
			DataTypeFactory typeFactory,
			FieldReferenceLookup fieldLookup,
			List<OverWindow> localOverWindows,
			List<LocalReferenceExpression> localReferences);

}