185 похожих чатов

Есть какие-нибудь хорошие статьи или примеры как организовывать CST? В

частности как бы там правильно хранить комментарии

47 ответов

59 просмотров

Red Green Tree - вариант из Roslyn. З.ы. мог ошибиться с названием.

Василий
Red Green Tree - вариант из Roslyn. З.ы. мог ошиб...

Ну про комменты там ничего особенного, но как пример реализации иммутабельного двунаправленного (!) дерева - очень классное решение

Можно их тупо "подвешивать" (как node вроде <comment text>) в дереве прямо туда, где они встретятся. А при обработке игнорировать такие nodes (в большинстве случаев). Впрочем, это зависит от того, зачем это нужно (что надо будет потом делать с этим CST), мне кажется...

Mar-Ort Автор вопроса
Yaroslav Schekin
Можно их тупо "подвешивать" (как node вроде <comme...

Не очень понятно что значит "подвешивать"

Mar Ort
Не очень понятно что значит "подвешивать"

Как-то так: assignment --------- / | \ \ / | \ \ x = comment expression---------------...-------- /*zzz*/ | \ \ expression------------- + \ / | \ \ \ d y comment + comment c /*aaa*/ /*bbb*/ (мне надоело "рисовать")

Mar-Ort Автор вопроса
Yaroslav Schekin
Как-то так: assignment --------- / | ...

Т.е. условно говоря в каждой ноде иметь N коллекций комментариев. Это конечно можно, но как-то жестко, я рассчитывал на что-то более элегантное

Mar Ort
Т.е. условно говоря в каждой ноде иметь N коллекци...

Хмм... в смысле "N коллекций" — вон там просто <comment nodes> развешаны в произвольных местах, и всё. Остаётся их только игнорировать в большинстве случаев при обработке. Но, опять-таки — зависит от того, что нужно.

Mar-Ort Автор вопроса
Yaroslav Schekin
Хмм... в смысле "N коллекций" — вон там просто <co...

Это если у вас нода не типизированная, т.е. дети представляются в виде списка произвольных нодов

Mar Ort
Т.е. условно говоря в каждой ноде иметь N коллекци...

К токенам можно "клеить" ещё, например (где-то я такое видел). Т.е. у любого token может быть ссылка на список (следующих за ним, либо предшествующих — от языка и ситуации зависит) комментариев. Тогда CST выглядит так, как будто их там нет.

Mar-Ort Автор вопроса
Yaroslav Schekin
К токенам можно "клеить" ещё, например (где-то я т...

Да, это однин из вариантов решения. Я думал можно что-то более красивое найти :)

Mar Ort
Да, это однин из вариантов решения. Я думал можно ...

А смотрели tree-sitter и ANTLR (я сходу не помню, какие там решения... в последнем, вроде, independent comments stream)?

Yaroslav Schekin
К токенам можно "клеить" ещё, например (где-то я т...

Но при преобразованиях всё равно нужно вспоминать, что они там есть.

Mar Ort
Это если у вас нода не типизированная, т.е. дети п...

Можно типизированную, просто комменты это тип any

Mar Ort
Да, это однин из вариантов решения. Я думал можно ...

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

Mar-Ort Автор вопроса
Лимон Цитрусовый
Ну, тут математика ограничивает. Есть набор нод и ...

Про выворачивание не очень понял. Можно пример?

Mar Ort
Про выворачивание не очень понял. Можно пример?

Да, все просто: https://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B3%D1%80%D0%B0%D1%84

Mar-Ort Автор вопроса
Лимон Цитрусовый
Да, все просто: https://ru.wikipedia.org/wiki/%D0%...

Чет не понятно как это к синтаксическим деревьям относится

cst это дерево токенов комментарии можно прикручивать к токенам, но не ясно правда вперед или назад

Yaroslav Schekin
К токенам можно "клеить" ещё, например (где-то я т...

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

Dr. Friedrich von Never
Есть ещё языки с интересными схемами комментариев,...

Вложенные комментарии — по-прежнему один комментарий, нет? Т.е. это несущественно, по идее...

Dr. Friedrich von Never
Есть ещё языки с интересными схемами комментариев,...

Таким комментам место исключительно в сатанинских скрижалях

Andrei Kurosh
Таким комментам место исключительно в сатанинских ...

Да ладно: это получантся при необходимости закоментировать фрагмент исходного кода

Andrei Kurosh
Таким комментам место исключительно в сатанинских ...

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

Andrey
Получается, Pascal — сатанинские скрижали

Ух: минутка "чистой ненависти"?.. ВУЗ / Школа + УПК ?

Victor Miasnikov
Ух: минутка "чистой ненависти"?.. ВУЗ / Школа + ...

Просто напоминание, что там комментарии можно вкладывать

Andrey
Просто напоминание, что там комментарии можно вкла...

И зачем вам Паскаль-69, если есть Паскаль-79, 85 или 89?

Это из документации к 3.0 85 года

Andrey
Это из документации к 3.0 85 года

Ок: хотел как раз это спросить. Т.е. можно так: { (* *) } но не иначе... ( так прочёл - солнце не способствует; блики)

Andrey
screenshot

Иметь два синтаксиса для комментариев, которые можно вкладывать только друг в друга, но не в самих себя - это хрестоматийное определение сатанинских скрижалей

Andrei Kurosh
Иметь два синтаксиса для комментариев, которые мож...

Хотел сказать, что это не позволяет делать произвольную вложенность, но уже не уверен

Andrei Kurosh
Иметь два синтаксиса для комментариев, которые мож...

А в Modula-2 ? ( это и есть Pascal-79 ) В Modula-3 точно ( 99/100 , в пнд. уточню, если вспомню) можно: (* (* Тра-ля-ля *) *)

Andrei Kurosh
Иметь два синтаксиса для комментариев, которые мож...

Это был 85 год, они развлекались как могли

Белый Кит
Хотел сказать, что это не позволяет делать произво...

Позволяет. Но если применять фигурные скобки только для временного закомментирования. Вообще-то, ещё можно вот так: (* * Эмуляция комметнтариев Ada *)

Victor Miasnikov
А в Modula-2 ? ( это и есть Pascal-79 ) В Modula-...

Вот я кстати тоже думал, что вкладывание комментариев сразу так работало. Пока не посмотрел в документацию

Andrey
Это был 85 год, они развлекались как могли

Забавно, что в в DEC к декабрю 1988 справились с задачей

Andrey
Вот я кстати тоже думал, что вкладывание комментар...

А я "нарвался" в энской лабораторной Ж-) Практически...

Andrey
Это был 85 год, они развлекались как могли

Даже тогда сделать нормально было несложно.

suhr
Даже тогда сделать нормально было несложно.

Я на свою голову полистал исходные коды Turbo Pascal ... Лучше бы я этого не делал. Но: оно же работало. И весьма неплохо. Хотя TopSpeed был заметно лучше

Andrei Kurosh
Таким комментам место исключительно в сатанинских ...

Да ладно :) Я во все свои разработки заношу вложенные комментарии. Это ж, как минимум, удобно...

Yaroslav Schekin
А смотрели tree-sitter и ANTLR (я сходу не помню, ...

В ANTLR есть разные каналы, но токены из них не клеятся к дереву - это нужно делать самостоятельно.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта