в моем лексере я написал следующее регулярное выражение:
"///"\s*[^@\s].*
Я выполнил byacc/j в режиме отладки и обнаружил, что следующая строка соответствует регулярному выражению.
Но почему? это регулярное выражение соответствует этой строке?
/// @Service( version="1.0.0" )
Я также пробовал "///"\s*[^\@\s].*
, если @
является специальным символом, но он тоже совпадает. о.О
Я думал, что мое регулярное выражение будет соответствовать только строке, начинающейся с ///
, за которой следуют необязательные пробелы. Затем должен идти любой непробельный символ, кроме @
, за которым следуют любые символы.
Редактировать: извините, я имел в виду, что регулярное выражение используется в jflex, не byacc/j.
Временное решение: в документации jflex я не нашел \s
escape-последовательность, поэтому я попробовал это регулярное выражение "///"[ \t\f]*[^@ \t\f].*
, и оно сработало. Кажется, что escape-символ \s
не поддерживается и молча игнорируется jflex.
"/// @Service( version="1.0.0" )"
с использованием шаблона:///\s*[^@\s].*
(я удалил кавычки, так как это специфично для byacc/j). - person Bart Kiers   schedule 22.08.2011