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

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

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

47 ответов

20 просмотров

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 есть разные каналы, но токены из них не клеятся к дереву - это нужно делать самостоятельно.

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

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

Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
Всем привет! procedure TForm1.FormCreate(Sender: TObject); type TStartEnd = record S: Byte; E: Byte; end; var a, b: TStartEnd; begin {1} a.S := 1; {2} a.E := 2; ...
Руслан Михайлович
10
Всем привет!) я тут новенький и пытаюсь освоить evolution методом тыка. У меня при переходе между папками файлов выскакивают вот такие уведомления Можете подсказать как их от...
Диман Samoed
10
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Карта сайта