  In this work, we study two simple yet general complexity classes, based on
logspace Turing machines, which provide a unifying framework for efficient
query evaluation in areas like information extraction and graph databases,
among others. We investigate the complexity of three fundamental algorithmic
problems for these classes: enumeration, counting and uniform generation of
solutions, and show that they have several desirable properties in this
respect.
  Both complexity classes are defined in terms of non-deterministic logspace
transducers (NL transducers). For the first class, we consider the case of
unambiguous NL transducers, and we prove constant delay enumeration, and both
counting and uniform generation of solutions in polynomial time. For the second
class, we consider unrestricted NL transducers, and we obtain polynomial delay
enumeration, approximate counting in polynomial time, and polynomial-time
randomized algorithms for uniform generation. More specifically, we show that
each problem in this second class admits a fully polynomial-time randomized
approximation scheme (FPRAS) and a polynomial-time Las Vegas algorithm for
uniform generation. Interestingly, the key idea to prove these results is to
show that the fundamental problem $\text{#NFA}$ admits an FPRAS, where
$\text{#NFA}$ is the problem of counting the number of strings of length $n$
(given in unary) accepted by a non-deterministic finite automaton (NFA). While
this problem is known to be $\text{#P}$-complete and, more precisely,
$\text{SpanL}$-complete, it was open whether this problem admits an FPRAS. In
this work, we solve this open problem, and obtain as a welcome corollary that
every function in $\text{SpanL}$ admits an FPRAS.
