Если в вашем файле abc.txt есть несколько многострочных комментариев, тогда ваш шаблон для многострочного комментария будет совпадать со всем между началом первого многострочного комментария и концом последнего многострочного комментария. Это происходит, когда lex демонстрирует жадное поведение и пытается найти самый длинный префикс входной строки. И ваш шаблон для многострочного комментария позволяет сопоставлять / * и * / (. * \ N) *
Кроме того, ваш код не будет обнаруживать однострочные комментарии, содержащие любые символы, кроме буквенно-цифровых символов и пробела (например,;; и т. Д.).
Измените ваши шаблонные действия на них, и это должно достичь вашей цели.
"//".*\n { ++single; }
"/*"[^*/]*"*/" { ++multi; }
Хотя приведенный выше код все равно оставит некоторые новые строки вместо удаленных многострочных комментариев. Это немного сложно, и я не могу найти быстрое решение, чтобы удалить эти новые строки.
Надеюсь, это поможет!