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