Я недавно добавил разбор исходного файла в существующий инструмент, который генерировал выходные файлы из сложных аргументов командной строки.
Аргументы командной строки стали настолько сложными, что мы начали разрешать их предоставление в виде файла, который был проанализирован, как если бы это была очень большая командная строка, но синтаксис все еще был неудобным. Поэтому я добавил возможность разбора исходного файла с использованием более разумного синтаксиса.
Я использовал flex 2.5.4 для окон, чтобы сгенерировать токенизатор для этого пользовательского формата исходного файла, и он работал. Но я ненавидел код. глобальные переменные, странное соглашение об именах и сгенерированный им код на c ++ были ужасны. Существующий бэкэнд генерации кода был приклеен к выводу flex - я не использую yacc или bison.
Я собираюсь вернуться к этому коду, и я хотел бы использовать более качественный / более современный инструмент. Кто-нибудь знает что-то такое.
- Запускается в командной строке Windows (интеграция Visual Studio в порядке, но я использую make files для сборки)
- Создает правильный инкапсулированный токенайзер C ++. (Без глобальных переменных)
- Использует регулярные выражения для описания правил токенизации (совместимо с синтаксисом lex a plus)
- Не заставляет меня использовать c-runtime (или подделывать его) для чтения файлов. (разбор по памяти)
- Предупреждает меня, когда мои правила заставляют токенизатор отказаться (или исправляют это автоматически)
- Дает мне полный контроль над именами переменных и методов (чтобы я мог соответствовать существующему соглашению об именах)
- Позволяет мне связать несколько парсеров в один .exe без коллизий имен
- Может генерировать анализатор UNICODE (16-битный UCS-2), если я хочу
- НЕ является встроенным токенизатором + синтаксическим генератором (я хочу замену lex, а не замену lex + yacc)
Я мог бы, вероятно, жить с инструментом, который только что сгенерировал таблицы токенизации, если бы это было единственно доступным.