ahk png
(38.99 KB, 522x591)
Ввёл фичу conditional compilation, но добавил в README ещё с десяток-двадцаток, потому что я о них вспомнил.
Но всё-равно препроцессинг пока не будет работать нормально. Мне надо сделать библиотеку dapa на Лайси или, хотя бы, её прототип на питоне, чтобы нормально парсить препроцессинг.
По-моему парсинг должен быть декларативным. Когда он императивен, то всё становится ужасно и плохо и отвратительно.
Я тут над тем, как сархитектурить dapa и пришёл к выводу, что он должен иметь инструменты не только для парсинга текста, но и разных бинарных форматов, файлов, протоколов. Например, часто можно увидеть формат файла, где в одном поле из нескольких байт написано количество следующих данных, а в поле следующим за тем будет хеш-функция от этих данных. И для этого надо придумать как реализовать подобные правила:
bytes(number=4,endian=little) + numbered(bytes(number=1),amount=NumberToken(relative - 1)) + checkhashsum(data=relative - 1), ну вы поняли. И какие-нибудь пресеты сделать, чтобы для человеческих языков в парсеры автоматически добавлялись вайтспейсы и всё такое.
В отличие от сижки с её #ifdef у меня заменено на @if expr, где может быть функция defined, возвращающая True, если задефайнено. Пока что только defined(X) введён, в дальнейшем в @if должны будут вычисляться и просто вычисляемые экспрешионы. А так как Лайси библиотеки предполагается распространять в виде исходных кодов, то в вычисляемых экспрешонах смогут быть всякие без-сайд-эффектные функции типа синуса, косинуса, разбиения concave на convex, распаковка байтовой строки...