public Action <ExpressionBuilder> Build(LenExpression value, Func <string, ITypedDeclaration> resolve)
        {
            var state = new ExpressionBuildState
            {
                Resolve = resolve
            };

            value.Visit(this, state);

            return(state.Result);
        }
        public bool Check(LenExpression expression, string token)
        {
            var result = new TokenCheckResult
            {
                Token = token
            };

            expression.Visit(this, result);

            return(result.Found);
        }
        public bool Check(LenExpression left, LenExpression right)
        {
            var result = new EqualityCheckResult
            {
                Other = right
            };

            left.Visit(this, result);

            return(result.AreEqual);
        }