Implementation [of finite automata for nested patterns]

Given the rules for a substitution system in the form used on page 931 a finite automaton (as on page 957) which yields the color of each cell from the digit sequences of its position is

Map[Flatten[MapIndexed[((#2 - 1) -> Position[rules, #1 -> _][[1, 1]]) &, Last[#], {-1}]] &, rules]

This works in any number of dimensions so long as each replacement yields a block of the same cuboidal form.