Гибкий скрипт, который соответствует пустым входам? - PullRequest
2 голосов
/ 22 июня 2011

Можно ли написать сценарий lex или flex, содержащий набор правил, в которых шаг сопоставления максимальных значений всегда будет соответствовать строке длины ноль?Определение регулярных выражений разрешает регулярные выражения, которые соответствуют только строкам нулевой длины.Например, простое регулярное выражение ε соответствует только пустой строке.Тем не менее, документация flex pattern , по-видимому, не позволяет указывать регулярные выражения этой формы.

1 Ответ

2 голосов
/ 05 июля 2011

Я не знаю о lex, но flex может сопоставить пустую строку, используя конечный контекст:

""/. { /* handle empty string */ }

Это будет соответствовать пустой строке перед любым символом, но это может быть почти любой шаблон(см. flex документация об ограничениях ).

<INITIAL>""/[-]{2} { BEGIN(sqlcomment); }
<sqlcomment>[^\n]* { /* Handle sql comment, including -- */ BEGIN(INITIAL); }

Если вы хотите сопоставить конец ввода, вы должны использовать специальный символ <<EOF>> (см. flex документация о eof ).

РЕДАКТИРОВАТЬ: Теперь, когда я думаю немного больше об этом, конечный контекст может быть не обязательным.Просто "" может сработать.Если это произойдет, я все еще настоятельно рекомендую использовать конечный контекст в этом случае, когда это возможно.Это предотвращает многие побочные эффекты при неправильном вводе и помогает при отладке.

...