LINUX.ORG.RU

[flex] невозножно применить правило

 


0

0

Есть вот такие правила для лекса.

%{
    #include <stdio.h>
    int count;
%}

%start START

ST "("
EN ")"

%%

{ST}        { BEGIN START; }

<START>"("  { count++; }
<START>{EN} { printf("%d\n", count); BEGIN 0; }

%%
При попытке его отлексить, он ругается ворнингом на строчку 15 (ту в которой происходит инкрементирование). Что характерно, в собранном сканере правило не применяется. Собственно два вопроса: чем ему не нравится правило и как таки добиться вышеозначенного?

★★★★★

Решилось очень просто: переносом инкрементирующего правила выше правила включающего состояние. Но вот почему оно так, всё равно не понимаю. После BEGIN START он же вроде бы должен рассматривать только правила помеченные как <START>?

KblCb ★★★★★
() автор топика
Ответ на: комментарий от KblCb

> %start START

похоже START==0 и BEGIN 0 тоже самое что и BEGIN START

SV0L0CH
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.