regular expression formal language logical language formal grammar formation rule kleene's theorem context-free language finite-state machine bilanguage finite automaton