I tried to google really a bit but cannot find a definitive answer.
My intuition on what the names implied, as well as some observations, tells me that BEGIN simply starts a new state and destroys the whole state stack on hold, while yy_push_state push a new state into the state stack, so that later we can use yy_pop_state to get the caller state back.
Is my intuition correct? if so, I wonder when should one prefer BEGIN over yy_push_start? is it used when we happen to want to eliminate the stack?