OPSHIFT
assert(opnd < 1<<OPSHIFT);
assert(value < 1<<OPSHIFT);
#define O_CH (18U<<OPSHIFT) /* end choice back to OOR1 */
#define OBOW (19U<<OPSHIFT) /* begin word - */
#define OEOW (20U<<OPSHIFT) /* end word - */
#define OEND (1U<<OPSHIFT) /* endmarker - */
#define OCHAR (2U<<OPSHIFT) /* character wide character */
#define OBOL (3U<<OPSHIFT) /* left anchor - */
#define OEOL (4U<<OPSHIFT) /* right anchor - */
#define OANY (5U<<OPSHIFT) /* . - */
#define OANYOF (6U<<OPSHIFT) /* [...] set number */
#define OBACK_ (7U<<OPSHIFT) /* begin \d paren number */
#define O_BACK (8U<<OPSHIFT) /* end \d paren number */
#define OPLUS_ (9U<<OPSHIFT) /* + prefix fwd to suffix */
#define O_PLUS (10U<<OPSHIFT) /* + suffix back to prefix */
#define OQUEST_ (11U<<OPSHIFT) /* ? prefix fwd to suffix */
#define O_QUEST (12U<<OPSHIFT) /* ? suffix back to prefix */
#define OLPAREN (13U<<OPSHIFT) /* ( fwd to ) */
#define ORPAREN (14U<<OPSHIFT) /* ) back to ( */
#define OCH_ (15U<<OPSHIFT) /* begin choice fwd to OOR2 */
#define OOR1 (16U<<OPSHIFT) /* | pt. 1 back to OOR1 or OCH_ */
#define OOR2 (17U<<OPSHIFT) /* | pt. 2 fwd to OOR2 or O_CH */