Я создаю лексер для выдуманного языка, и у меня проблема с определением регулярного выражения для однострочного комментария.
Проблема в том, что разрешенные символы комментария ограничены.Допускаются только некоторые символы, и они включают в себя: пробелы, цифры, буквы и несколько символов (скажем, *
, /
, +
, -
).Однострочный комментарий начинается (как в C и Java) с //
, а его определение (за исключением ограниченных символов) такое же, как в C и Java.
Сначала я попробовал следующее регулярное выражение:
"//" ([a-zA-Z0-9] | [*] | [/] | [+] | [-] | [ \t\f])* (\r|\n|\r\n)
Мы надеемся, что это поймает однострочные комментарии, но, к сожалению, это не поймает однострочный комментарий в конце файла, так как он нев конце есть разделитель строки.
Я пытался изменить его на:
"//" ([a-zA-Z0-9] | [*] | [/] | [+] | [-] | [ \t\f])* ((\r|\n|\r\n) | [^.])
Надеюсь, [^.]
поймал бы тот факт, что естьпосле комментария не допускаются символы (как-то эмулировать EOF
?), но это не сработало, и регулярное выражение перехватывает все до запрещенного символа, например: // comment = 1
переводится в single line comment
, =
1
.
Я не могу использовать JFlex <<EOF>>
, так как он не может быть частью регулярного выражения.
Есть ли хорошее регулярное выражение решение этой проблемы?(Предполагая, что я не могу изменить ввод).
Спасибо!