я пишу редактор ассемблера для arm микроконтроллеров, в частности сам использую для stm32f4
и тоже столкнулся с необходимостью парсинга текстов
если кто сталкивался с системой команд arm то он представляет сложность задачи: многие команды имеют суффиксы, в зависимости от суффиксов у команд могут быть те или иные аргументы.. причем я не понимаю зачем делать просто токен-подсветку не учитывая синтаксис команды - кроме красоты кода никакого реального удобства эта подсветка не предоставляет - так как написанное может быть полной чушью с точке зрения компилятора из за неправильно написанной команды, и будет выявлено только при компиляции проекта, а не во время редактирования, поэтому при постановке задачи я решил, что буду проводить полный разбор команд, я не просто подсвечивать токены
результат могу показать на картинках
вот например пример правильных и не правильных команд, и как они показываются например в vscode
- то что показывает vscode
- vscode.jpg (4.26 KiB) Viewed 10782 times
и вот так подсветка происходит в моем редакторе
- отображение в asmedit
- asmedit.jpg (5.37 KiB) Viewed 10782 times
помоему такая подсветка и должна быть в редакторах кода.
очень большой проблемой оказалась обработка группы asm файлов, так как существуют еще и глобальные символы, а так же в моих старых проектах бывали файлы определений на 6000 строк - что требует не малой оптимизации при парсинге
так вот, пишу здесь потому чтобы рассказать о своем ухищрении которое возможно будет кому то интересно:
парсить что либо при помощи тексто-заданных правил - очень дорого с точки зрения времени!
поэтому я преобразовывал текстовый файл парсинга в байт код... фактически, казалось бы крайне неоптимальный способ описания правил парсинга в ini файле реально работает намного быстрее парсинга по текстовым строкам ("а ля регулярные выражения" перл)
- cortex-m4.ini
- файл конфигурации парсинга
- (58.7 KiB) Downloaded 333 times
достаточным оказалось не так уж большого списка правил (не вложился файл, наверное pdf слишком большой)
по вопросу в стартовом сообщениии о наборе команд: все команды описаны в PM0214 Programing manual (для cortex-m4), гуглится, находится на сайте ST
так же мой редактор поддерживает навигацию по символам/меткам/файлам, программирование при помощи st-link, отладку при помощи openOCD (это еще пишется)
не знаю можно ли здесь размещать ссылки на мой проект поэтому воздержусь...