Парсер работает с токенами, его кодировка не обязательна. Обычно он просто сравнивает идентификаторы токенов, и в случае, если вы кодируете свои особые правила, вы можете сравнить подчеркивающие строки UTF-8 так, как вы это делаете где-либо еще.
Так вам нужен лексер UTF-8? Ну, это сильно зависит от того, как вы определите свою проблему. Если вы определили свои идентификаторы, которые состоят из буквенно-цифровых символов ASCII и чего-либо еще, кроме ASCII, то flex вполне удовлетворит ваши потребности. Если вы действительно хотите передать диапазоны Юникода на лексер, вам понадобится нечто более сложное. Вы можете посмотреть на Quex . Я никогда не использовал его сам, но он утверждает, что поддерживает Unicode. (Хотя я бы кого-нибудь убил за «бесплатную информацию / поиск по индексам персонажей»)
РЕДАКТИРОВАТЬ: Вот аналогичный вопрос , он утверждает, что flex не будет работать из-за ошибки, которая игнорирует, что некоторые реализации могут иметь подписанный символ ... Это может быть хотя устарел.