Я не знаю о lex, но flex может сопоставить пустую строку, используя конечный контекст:
""/. { /* handle empty string */ }
Это будет соответствовать пустой строке перед любым символом, но это может быть почти любой шаблон(см. flex документация об ограничениях ).
<INITIAL>""/[-]{2} { BEGIN(sqlcomment); }
<sqlcomment>[^\n]* { /* Handle sql comment, including -- */ BEGIN(INITIAL); }
Если вы хотите сопоставить конец ввода, вы должны использовать специальный символ <<EOF>> (см. flex документация о eof ).
РЕДАКТИРОВАТЬ: Теперь, когда я думаю немного больше об этом, конечный контекст может быть не обязательным.Просто "" может сработать.Если это произойдет, я все еще настоятельно рекомендую использовать конечный контекст в этом случае, когда это возможно.Это предотвращает многие побочные эффекты при неправильном вводе и помогает при отладке.