Automata-based programming