Page 1 of 1

lexer Assembly STM32 & GNU

Posted: 09.01.2021 20:25
by uvviewsoft
Lexer Assembly STM32 was created just today.
I had only few examples from this repo
https://github.com/MightyPork/stm32-asm-examples
and I don't even have the full list of keywords, opcodes, registers of STM32.
so my keywords lists are not complete.
write all lexer bugs here.
lexer shows "proc" blocks in the code-tree.

Posted: 12.01.2021 04:39
by VitGo
the full text of instructions depends on the kernel, in principle there is in the docs on mcu, in my case, for stm32f4, this is pm0214 Programming manual

I was also puzzled by the creation of an editor, though for gnu as

now only stm32f4 is available
dynamic highlighting with full parsing of assembler commands (registers, symbols)
there is a simple interaction with st-link, started doing debugging (no breakpoints set yet)

Of course, everything is not as beautiful as yours and the language is still only Russian

on this forum is it offtopic?

unfortunately did not understand how to insert images (img tag is prohibited)

https://sun9-39.userapi.com/impf/qQCiEx ... type=album

directLink https://yadi.sk/d/NSVJ1wY9S-soGA

Posted: 12.01.2021 11:41
by uvviewsoft
разрешаю ответить тут по русски, но более подробно+понятно.

EN: broken english. I don't get the idea. what do you want:
a) to create lexer for GNU AS? if yes, pls send several GNU AS files. your IDE has them?
b) to fix bugs in STM32 lexer? which issues? write in details.

Posted: 16.01.2021 15:33
by VitGo
я пишу редактор ассемблера для arm микроконтроллеров, в частности сам использую для stm32f4

и тоже столкнулся с необходимостью парсинга текстов
если кто сталкивался с системой команд arm то он представляет сложность задачи: многие команды имеют суффиксы, в зависимости от суффиксов у команд могут быть те или иные аргументы.. причем я не понимаю зачем делать просто токен-подсветку не учитывая синтаксис команды - кроме красоты кода никакого реального удобства эта подсветка не предоставляет - так как написанное может быть полной чушью с точке зрения компилятора из за неправильно написанной команды, и будет выявлено только при компиляции проекта, а не во время редактирования, поэтому при постановке задачи я решил, что буду проводить полный разбор команд, я не просто подсвечивать токены

результат могу показать на картинках
вот например пример правильных и не правильных команд, и как они показываются например в vscode
то что показывает vscode
то что показывает vscode
vscode.jpg (4.26 KiB) Viewed 10782 times
и вот так подсветка происходит в моем редакторе
отображение в asmedit
отображение в 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 (это еще пишется)

не знаю можно ли здесь размещать ссылки на мой проект поэтому воздержусь...

Posted: 16.01.2021 15:38
by VitGo
[quote="uvviewsoft"]разрешаю ответить тут по русски, но более подробно+понятно.

a) to create lexer for GNU AS? if yes, pls send several GNU AS files. your IDE has them?

пример проекта во вложении, старт тактирования, старт systick, мигание светодиодами GPIOH 2 & 3

гм.. zip архив не вкладывается :-(
даю ссылку https://yadi.sk/d/rx5EhHMWTClkAQ
ну и ссылка на редактор в текущей реализации https://yadi.sk/d/DgczJg88rTjXWg

Posted: 16.01.2021 19:22
by uvviewsoft
понятно, что хороший редактор получается. что для CudaText? вобщем то можно было бы задать все эти правила в regex лексера, но будет некрасиво (вся строка одним цветом, все токены) и медленно. так что пока оставляю.

есть еще вариант. делаем пустой лексер (без покраски, просто чтобы был). или берем subj. на него "вешаем" плагин и плагин должен красить. по событию on_change/ on_change_slow. искать кодом все что надо и делать Editor.attr().

Posted: 17.01.2021 17:56
by uvviewsoft
про лексер GNU AS. он нужен? вы будете его тестировать и говорить про недочеты?
и если да то дайте мне все его keyword lists. списки слов. 1) оп коды 2) reserved words. 3) registers.

Posted: 30.12.2021 13:38
by Alexey
Lexer Assembly GNU (for GNU Assembler) was published today.
It was tested on 2-4 files from github repos.
feedback is welcome.