# Recursive definition of a language given the regular expression

Consider the language: $$L_1 = \{ x \in \Sigma^* : x \text{ does not contain the substring } 110\}$$

I know that there is a DFA that accepts this language, and furthermore, that the regular expression is: $$(0 \cup 10)^* 1^*$$

I'm asked to obtain a formal recursive definition of $L_1$, that is, find a basis $B \subset \Sigma^*$ and a finite set of functions on strings $\mathcal{F}$ such that $L_1$ is the closure of $B$ under $\mathcal{F}$, i.e. $L_1 = \langle B \rangle_{\mathcal{F}}$

I'm not sure how to go about this. Every way I can think to "encode" the regular expression into "functions" that build the language they're really ugly or involve piecewise definitions (if $x$ doesn't end with 1, otherwise, etc.)

Is there a simple and clean way to do this?

Just replace Kleene stars with $\epsilon$ to find the basis and position, then extend to both direction.
$B=\{\epsilon\}$
$\mathcal{F}=\{X\to0X|10X|X1\}$
$L_1 = \langle B \rangle_{\mathcal{F}}$