В следующем коде, что пропускает комментарии, что значит BEGIN(INITIAL)
?Значение INITIAL в lex
%x C_COMMENT "/*" { BEGIN(C_COMMENT); } "*/" { BEGIN(INITIAL); } . { }
В следующем коде, что пропускает комментарии, что значит BEGIN(INITIAL)
?Значение INITIAL в lex
%x C_COMMENT "/*" { BEGIN(C_COMMENT); } "*/" { BEGIN(INITIAL); } . { }
INITIAL - это состояние, которое неявно объявлено во всех программах lex. (C_COMMENT также является состоянием, но он не встроен в lex, поэтому он явно указывается.)
BEGIN (statename) просто означает ввести государственное имя. Итак, что делает этот снимок lex, следующее: Если «/ *» читается, он переходит в состояние C_COMMENT, когда видит «* /», он возвращается к состоянию по умолчанию.
Теперь вы можете добавить правила, которые игнорируют все входные данные (кроме «* /», конечно), когда в состоянии C_COMMENT, делая другие вещи с помощью ввода, когда вы не находитесь (или когда вы находитесь в состоянии НАЧАЛЬНОЕ).