yy_top_state(), похоже, не работает с flex

Итак, я пишу этот реентерабельный сканер с помощью flex и использую параметр стека для отслеживания состояния. Согласно документации, кажется, что

yy_push_state(SCRIPT, yyscanner);
//now yy_top_state(yyscanner)  == SCRIPT; should eval true right?

но когда я помещаю следующий printf() сразу после yy_push_state()

printf("SCRIPT=%d; DQUOTE=%d; CURRENT=%d\n", SCRIPT, DQUOTE, 
       yy_top_state(yyscanner));

Я получаю это в обмен на вывод

SCRIPT=2; DQUOTE=3; CURRENT=1

Пожалуйста, укажите, что я делаю неправильно, если что-то вообще.

заранее спасибо


person Joseph Moniz    schedule 02.11.2010    source источник
comment
какое значение вы ожидаете; то есть какова ценность NEWSTATE?   -  person Marc Butler    schedule 02.11.2010
comment
неаккуратный вопрос, мой плохой. NEWSTATE был псевдонимом для SCRIPT. то есть я действительно выполняю yy_push_state(SCRIPT, yyscanner); но yy_top_state(), похоже, не отслеживает это. * исправлено *   -  person Joseph Moniz    schedule 02.11.2010


Ответы (1)


Нет, я так не думаю. Судя по коду, который я видел, это текущее состояние, которое помещается в стек, а затем состояние меняется на новое.

После расширения стека, если необходимо, yy_push_state(new_state) выполняет:

(yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
BEGIN(new_state);

где YY_START — это макрос, основанный на текущем состоянии, а BEGIN — это то, что устанавливает новое состояние.

person paxdiablo    schedule 02.11.2010