/ / BEGIN (INITIAL) w parserze flex - flex-lexer, parsowanie tekstu

BEGIN (INITIAL) w parserze flex - flex-lexer, tekst-parsowanie

Mam elastyczne pytanie. Nie rozumiem, co to jest polecenie BEGIN (INITIAL). Myślę, że jest to sposób, aby przejść do początku aktualnego stanu, w którym już jestem, ale nie jestem pewien, czy poprawnie to zrozumiałem. Czy możesz mi wyjaśnić w prosty sposób, co robi BEGIN (INITIAL)?

Z góry dziękuję!

Odpowiedzi:

4 dla odpowiedzi № 1

Przywraca stan początkowy. Powiedz, że masz coś takiego:

%x FOO
%%

[A-Z]    { BEGIN(FOO); }
.        {}
<FOO>.   {}
<FOO>n  { BEGIN(INITIAL); }
%%

Tutaj stan początkowy, tj. stan INITIAL to stan, który pasuje do dwóch pierwszych wzorców, tj. stan „domyślny”. Jeśli przeczytasz jakąkolwiek wielką literę, skończysz w stanie FOO. W stanie FOO, jeśli napotkasz nowy wiersz, skończysz w stanie początkowym, który jest ponownie stanem, który pasuje do dwóch pierwszych reguł.