Хм, похоже на странную проблему с пространством имен, у вас есть два объявления в двух разных пространствах имен, например,
lang::lexyacc::yy_delete_buffer(yy_buffer_state*)
и
yy_delete_buffer(yy_buffer_state*)
У них одинаковые списки аргументов, но они находятсяв других пространствах имен, другое в lang :: lexyacc, другое по умолчанию.
Если вы не можете выяснить причину этого, вы можете указать
%option c++
возможность Flex для получения реального класса сканера C ++.