automata-based programming