Combining regular expression and NFA components is also possible. For example, regular expressions are used to define a subset of the context-free languages, which are the class of languages recognized by NFA with only one initial state (i.e. the language is finite and not regular). More generally, this can be done for any k-stack automaton, which is defined by a regular expression with a stack used as a computation-triggered queue for pending events.
One of the most important characteristics of regular expressions is that they can be used to represent languages that are infinite and even nonregular in the sense that the resulting automaton may not be equivalent to a DFA even though the original language is regular. This can occur when there is no language-theoretic way to define a canonical form for the input to any regular expression . In general, the number of states in a regular expression is always an exponential function of the number of symbols in the alphabet. On the other hand, NFAs (and k-automata, for all k>=1) can have a polynomial number of states. Thus, for any finite alphabet, the running time of any algorithm that generates all regular expressions of the given length is exponential, even if it might be efficient on a certain class of input.
Algorithms for generating the language of a regular expression are not unique. A simple algorithm that uses a DFA for the lexical component, and a DFA for the regex component, is often used. Some important algorithms are shown here, with an explanation of how they can be adapted to be more efficient.
The regular expression p can be represented in what is known as a Kleene star, ?. The Kleene star is a special type of pattern that matches a string that has zero or more of the pattern following it. Every character in the regular expression has a specific meaning, and an * will match zero or more of those characters, including the special character * itself. For example, if our pattern is p, then p* will match the lines xyz and yz. If our pattern is p?, then p*? will match the lines xyz, xyz, xyz, xyz, xyz, xyz,..., but will not match the lines abc, bcd 827ec27edc