пропустить синтаксический анализ, если условие "если" не выполнено - PullRequest
2 голосов
/ 21 января 2012

Я пытаюсь создать простой парсер.

cond:   T_IF '(' exp ')' '#' stmt_block opt_elseifs opt_else end    {if($3 == 0) return;}

opt_elseifs : /* Nothing */                                                        
            | opt_elseifs  T_ELSIF '(' exp ')' '#' stmt_block '#'                  
;
opt_else : /* Nothing */
         | T_ELSE '#' stmt_block '#'
;
end : '#'
;

Например,

a = 0;
if(a) #
c = 10 + 20;
#

Я не хочу, чтобы значение c печаталось, но это значение печати c. Что я тут не так делаю?

1 Ответ

0 голосов
/ 23 января 2012

Нашел решение после прочтения руководства по бизонам. Итак, я подумал, что мне лучше поделиться этим здесь. Я должен делать

cond:   T_IF '(' exp ')'     { if($3 == 0) return; }
        '#' stmt_block  opt_elseifs opt_else end    
;

Итак, если exp оценивается как ложное, он больше не анализируется.

...