With this approach the code in the PROCEDURE DIVISION can be simple and compact, because most of the intelligence lies in WORKING-STORAGE. For the same reason, however, the WORKING-STORAGE table requires a lot of tedious typing, even if it does not occupy much memory.
The simplest way to compress the table is to divide the character set into a small number of categories. For example, during lexical analysis we can probably treat all letters as equivalent, and all digits as equivalent. With additional categories for blank spaces, end-of-line, a few specific punctuation characters, and a garbage category for other characters, we may need no more than a dozen entries for each state.
With a little ingenuity we may be able to compress the table further by exploiting whatever redundancies we can find. For smallish FSMs, however, it's probably not worth it.
In some FSMs each state reads the next input character. If so, this input may be hard-coded into the PROCEDURE DIVISION. If not, the table may specify which states read a character and which do not. Likewise many states, but not necessarily all, will add the current character to some kind of buffer.
Other actions depend on the peculiarities of the FSM. A terminal state may do something with the token it has recognized, or issue an error message. A non-terminal state might apply some kind of test -- e.g. check the length of the token accepted so far.
One approach is for the table to carry symbols referring to paragraphs. The FSM will look up the symbol by state and event, and then perform the corresponding paragraph.
(If we were programming in C or C++ we might do the same thing more directly by storing function pointers in the table. In C++ we could also store pointers or references to functors. However, these pages are directed to COBOL programmers.)
Sometimes the various actions comprise different combinations of a few sub-actions. If so, the table can encode a flag for each sub-action. The FSM performs whichever actions are turned on for a given state and event.
There may be cases where it is not feasible to use subscripts in this manner. If you have to use the SEARCH verb, then use the SEARCH verb, but performance may suffer.
Further reading