assert(der('a', ZERO | ONE) == (ZERO | ZERO)) assert(der('a', (CHAR('a') | ONE) ~ CHAR('a')) == ALT((ONE | ZERO) ~ CHAR('a'), ONE)) assert(der('a', STAR(CHAR('a'))) == (ONE ~ STAR(CHAR('a')))) assert(der('b', STAR(CHAR('a'))) == (ZERO ~ STAR(CHAR('a'))))