crypt of decay - редактор и синтаксис-в-красках (несемантический) [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

редактор и синтаксис-в-красках (несемантический) [Jan. 16th, 2022|06:56 am]
Previous Entry Add to Memories Tell A Friend Next Entry
сразу отделим «семантическую» раскраску, и выкинем. «семантическая» — это когда редактор парзит текст в нечто наподобие AST, и красит по нему. хотя этот подход и позволяет много крутых штук, но реализовывать его муторно: надо делать полную грамматику языка, и парзер, устойчивый к коду с ошибками. это, конечно, решаемо, и даже библиотеки есть — но как по мне, то трудозатраты не стоят результата. поэтому я такое делать не буду.

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

как это делать правильно? тоже регулярками, конечно. но специализированым движком, который на выходе даёт DFA. прелесть DFA в том, что этот автомат всегда ровно в одном состоянии, и спокойно адвансится по символу за раз. поскольку нам не надо знать позиции субматчей, то мы можем просто сконструировать DFA напрямую из регулярки.

чем это лучше, чем универсальный движок? тем, что не надо тащить большую библиотеку (которую сначала надо найти, потому что в основном библиотеки регэкспов не имеют пошагового API), и тем, что можно потратить некоторое время, чтобы создать и оптимизировать DFA: это надо сделать один раз, у нас жёстко фиксированый набор регулярок. неважно, будет ли построитель суперэффективным: простота кода здесь важнее. к тому же DFA обычно больше, чем NFA, поэтому даже если существующая библиотека и использует внутри DFA — то обычно DFA строится на лету из NFA, и то не полностью. в нашем же случае эти оптимизации только мешают.

где-то на этом месте я вспомнил, что совершенно забыл, как компилировать регэксп в DFA. кажется, это было в Драконьей Книге, и где-то у Томпсона. придётся идти и читать всё заново. заодно искать, есть ли алгоритм, который позволяет добавить регэксп в уже существующий DFA: с точки зрения API удобней добавлять по одному регэкспу на токен. конечно, их можно на лету собирать в один огромный регэксп, и потом его скомпилировать, но у меня есть подозрение, что инкрементальное построение проще и эффективней.

чёрт, уже десятка, наверное, два лет этим не занимался, а регулярки всегда делал виртуалкой по томпсону-пайку. в прошлом редакторе DFA использовался только для кейвордов, а числа и прочее посложнее парзились явно. не хочу так, хочу красивый DFA.
Linkmeow!

Comments:
[User Picture]
From:[info]steinkrauz
Date:January 16th, 2022 - 11:56 am
(Link)
*мрачно*
С каждым новым постом моя самооценка падает всё ниже и ниже.
[User Picture]
From:[info]ketmar
Date:January 16th, 2022 - 12:34 pm
(Link)
не переживай, моя тоже. я тоже всего этого уже не умею, и приходится опять идти и учить всё заново. а знаешь, как страшно Драконью Книгу открывать? я ж там могу угрузнуть на месяцы, там всё такое интересное, детектив на детективе.

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

а потом мне ещё как минимум два движка регулярок делать: томпсона для поиска, и пайка для замены.
[User Picture]
From:[info]steinkrauz
Date:January 16th, 2022 - 01:26 pm
(Link)
Тут разница в том, что ты -- уже, а я ещё.
Ну то есть в институте мы грамматики проходили, лабы писали, да и автоматы я по работе писал, но всё это на таком сельскохозайственном уровне...

И ведь хрен когда самообразованием заняться: на работе то графики в BI строишь, то студентам рассказываешь как контейнерами пользоваться надо, а дома на экран уже смотреть тошно.
[User Picture]
From:[info]ketmar
Date:January 16th, 2022 - 01:32 pm
(Link)
>Тут разница в том, что ты -- уже, а я ещё.
с практической точки зрения особой разницы тут нет. ;-)

ну вот мне впервые за 10-15 лет пригодилось. и к этому времени я всё равно всё забыл. фигле толку-то.
[User Picture]
From:[info]steinkrauz
Date:January 16th, 2022 - 01:54 pm
(Link)
А тут как в том анекдоте: инженер это не тот, кто помнит наизусть все формулы, а тот, кто знает, в каком справочнике их посмотреть :)
[User Picture]
From:[info]ketmar
Date:January 16th, 2022 - 04:04 pm
(Link)
эх. всё-таки придётся читать драконов: там классический алгоритм, всё на него ссылаются, и никто толком не перепечатывает. прощай, жестокий мир!
From:(Anonymous)
Date:January 16th, 2022 - 05:23 pm
(Link)
и полез в книжный шкаф за "Справочником объемов маленьких резиновых красных мячиков"
From:(Anonymous)
Date:January 17th, 2022 - 12:01 am
(Link)
> а дома на экран уже смотреть тошно

вот в этом-то и проблема многих тех, кто "хочу, но из-за работы не могу".
прогание _должно_ приносить удовольствие, иначе мрак, адЪ и гроб с пидорами, а после 40 ещё и безработица.

/ЧД/
[User Picture]
From:[info]ketmar
Date:January 17th, 2022 - 12:53 am
(Link)
проблема в том, что когда оно приносит удовольствие — то за это обычно нихуя не платят. и наоборот.
[User Picture]
From:[info]sometimes
Date:January 17th, 2022 - 01:41 am
(Link)
Вот поэтому коммунизм и важен.

Но коммунизм должен быть со специальными наркотиками: допустим, на Земля летит большой-большой шайтан астероид, а всем его двигать лень и не то чтобы даже лень, но он же не сегодня ещё прилетит? астероид двигать руттинная скучная работа, в ней нет изюминки и вообще алгоритм прямолинейный.

Вот. И тогда руководящие люди достают специальные наркотики и говорят всем: принимайте эти наркотики. И они принимают эти наркотики, и им становится интересно двигать астероид. Потому что они ответственные люди, и понимают в глубине души, что астероид двигать-то надо, иначе всем пизда. Просто без наркотиков очень скучно.

Кстати, ты слышал новость? Ждалкер перенесли. Ты ошеломлен? Я ошеломлен.
[User Picture]
From:[info]ketmar
Date:January 17th, 2022 - 01:59 am
(Link)
коммунизм, видишь ли, во-первых: не бывает при наличии каких-либо «руководящих людей» (это что угодно, но только не коммунизм); и во-вторых: без постиндастриала (как раз потому, что человеки не должны заниматься рутинной хуйнёй — для этого есть наука, которая придумывает методы и технику, чтобы рутинная хуйня не заёбывала).

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

>Кстати, ты слышал новость? Ждалкер перенесли. Ты ошеломлен? Я ошеломлен.
спасибо, мне уже доложили (ц)
[User Picture]
From:[info]sometimes
Date:January 17th, 2022 - 02:14 am
(Link)
> человеки не должны заниматься рутинной хуйнёй

а как ты определишь "рутину"? ну вот реально представь: возникла некоторая опасность, или просто мы решили, что неплохо бы построить термоядерный реактор. строить его 50 лет. по ходу постройки периодически вылезает что-то новое и интересное, но вообще говоря природа не обязана нас удовлетворять: там может быть и 10 лет подряд что-то, что скучно (кому-то).

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

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

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

но вообще речь о том, что требование ситуации в момент времени T никому не обязано быть конгруэнтно набору талантов человечества, от чего людей прет, в этот данный момент времени T.

вот такое лублу
[User Picture]
From:[info]ketmar
Date:January 17th, 2022 - 02:28 am
(Link)
>а как ты определишь "рутину"?
это всё, что возможно автоматизировать. соответственно и прямая задача науки — научиться это делать.

>соответственно этим надо уметь управлять
кому надо? конкретного человека покажи, которому это надо. вот он и сделает. потому что: «ну, в принципе надо… кому-то… всем, может…» — это значит, что не надо никому.

потому что ты сейчас рассуждаешь о том, что некоему абстрактному человечеству что-то будет возможно надо. это прямой путь к обществу служения хуй знает чему (на деле — тем, кто подвесил перед мордой морковку).

ты серьёзно считаешь, что в коммунистическом постиндустриальном обществе не найдётся никого, кому охота пожить подольше, и все забьют? вообще-то будет ровно наоборот, потому что ёбнуть астероид — это очень интересная задача. точнее, это тривиальная задача, поэтому решать быстро начнут задачу: «а чего такого интересного и полезного с этой каменюкой сделать можно? ёбнуть-то любой дурак способен.»
From:(Anonymous)
Date:January 17th, 2022 - 06:58 am
(Link)
А нахуя вообще нужны людишки в мире постиндустриала? Потреблять произведенное роботами? Пусть лучше сдохнут - больше ресурсов достанется роботам на полет к астероиду.
[User Picture]
From:[info]ketmar
Date:January 17th, 2022 - 03:52 pm
(Link)
а зачем вообще «нужны люди»? правильно, низачем. однако ж ты, например, не убил себя апстену, и не собираешься. вот это и есть ответ.
From:(Anonymous)
Date:January 17th, 2022 - 04:52 pm
(Link)
> и не собираешься

С чего это ты взял?
[User Picture]
From:[info]ketmar
Date:January 17th, 2022 - 05:06 pm
(Link)
с того, что кто хочет — тот делает. а кто не хочет — тот ходит и рассказывает, что может быть когда-нибудь сделает. может даже прямо завтра. но это неточно.
From:(Anonymous)
Date:January 17th, 2022 - 05:20 pm
(Link)
А куда спешить-то?
[User Picture]
From:[info]ketmar
Date:January 17th, 2022 - 05:28 pm
(Link)
вот-вот.
From:(Anonymous)
Date:January 21st, 2022 - 06:50 pm
(Link)
Работа в целом должна приносить удовольствие.
/Jah/
From:(Anonymous)
Date:January 16th, 2022 - 05:26 pm
(Link)
"но есть нюанс"

ты вон жалуешься, что забыл, как регекс в дфа компилить, а мне пришлось вспоминать - дфа? дфа???