Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2016, 15:13   #1
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию Способ описания деревьев?

Требуется выработать удобное для программиста описание деревьев в тексте программ. Ну допустим имеется структура а и что-то типа:
а описание:
а.x
a.x.y
a.x.z
a.y
конец описания

Получаем описание дерева:
.....a
..../.\
..y...x
...../..\
...y.....z

Суть проблемы: уметь описывать сложные деревья простым и понятным для человека способом в тексте.
У кого какие предложения?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 26.05.2016, 15:28   #2
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

В комментариях что ли? Прикладываешь к тексту программ схемки в SVG или PNG.

Последний раз редактировалось the_deer_one; 26.05.2016 в 15:30.
the_deer_one вне форума Ответить с цитированием
Старый 26.05.2016, 15:30   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Не, а как эту схемку исполнять? Вот чтобы Вам проще было понять представьте, что есть класс дерева. Как быстро построить его структуру? Так чтобы было и программисту понятно и чтобы потом с этим деревом в программе дальше работать?

ЗЫ. Когда писал пост, исправлений еще не было
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 26.05.2016 в 15:34.
Utkin вне форума Ответить с цитированием
Старый 26.05.2016, 15:52   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Graphviz?
http://www.graphviz.org/content/dot-language
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 26.05.2016, 15:58   #5
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,657
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Деревья существенно проще неограниченного строения.

Я бы отказался от тестового редактора для работы с ними, лучше хорошее средство с удобными действиями (те же перемещения по дереву плохо соответствуют тексту).
Но если именно в тексте, то либо последовательное перечисление от корня/предка, что чревато повторами, либо парные с пространственными раскрытиями, аля скобок (хотя необязательно именно они):
a(x(y,z),y)
По-другому никак.
С точки зрения правок запись деревьев в текст тоже не эффективна.
Благими намерениями устлана дорога на programmersforum.ru

Последний раз редактировалось MihalNik; 26.05.2016 в 16:03.
MihalNik вне форума Ответить с цитированием
Старый 26.05.2016, 16:27   #6
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Так чтобы было и программисту понятно и чтобы потом с этим деревом в программе дальше работать?
Я как обычно тебя не понимаю.

Парсить проще лисповские скобочки ((d (a b)) y). Но вот с удобством всё плохо.

Если и парсить и читать то можно в XML записывать.

Если чисто в коде, то мне нравится как в C# сделали.
Код:
XDocument d = new XDocument(
    new XComment("This is a comment."),
    new XProcessingInstruction("xml-stylesheet",
        "href='mystyle.css' title='Compact' type='text/css'"),
    new XElement("Pubs",
        new XElement("Book",
            new XElement("Title", "Artifacts of Roman Civilization"),
            new XElement("Author", "Moreno, Jordao")
        ),
        new XElement("Book",
            new XElement("Title", "Midieval Tools and Implements"),
            new XElement("Author", "Gazit, Inbar")
        )
    ),
    new XComment("This is another comment.")
);
the_deer_one вне форума Ответить с цитированием
Старый 26.05.2016, 18:46   #7
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Хороший вопрос! Как лучше организовать деревья и как с ними работать?
Цитата:
а описание:
а.x
a.x.y
a.x.z
a.y
конец описания

Когда я сделал разбор строчки:
Код:
Result:=Byte(Ch);

И получил следующее дерево. Картинка кликабельна.


Чего не понравилось. Так это то что в генераторе эти все точки выглядят громоздко!

Код:
procedure TPrinterAST.PrintVarAssignTypeCast(
  const VarAssignAST: TVarAssignAST);
var
  SignatureAST:TSignatureAST;
  Left, Righte:TVarDeclAST;
begin
  SignatureAST:=(VarAssignAST.Expression.Factor1.Node as  TSignatureAST);
  Left:=VarAssignAST.Signature.IndentDeclRef as TVarDeclAST;
  SignatureAST:=SignatureAST.Designator.Expression.Factor1.Node as TSignatureAST;
  Righte:=SignatureAST.IndentDeclRef as TVarDeclAST;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 26.05.2016 в 18:48.
Pavia вне форума Ответить с цитированием
Старый 26.05.2016, 19:11   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Как лучше организовать деревья и как с ними работать?
Вот это я сделал, как сам себе понял. Вопрос в том, как вот начать. Ну конструктор дерева. То есть я вот хочу как-то просто описать его, а система потом автоматически на основании описания это дерево построит. Задача - создать язык описания дерева простым и понятным для человека способом. Ну конечно есть там примитивные операции типа создать узел. Но блин, описать так например оргструктуру большой конторы будет очень утомительно и нефига не понятно, а это источник ошибок. Лисповые списки в скобочной записи я уже пробовал, даже относительно небольшие деревья в 3-4 уровня убивают количеством скобок.
Цитата:
Если и парсить и читать то можно в XML записывать.
Шутку понял, пикатно, по-заграничному. Дерево во внешних источниках в XML и хранится. Но вот записывать в тексте программы XML, ручками с целью создания дерева это жесть. Поверьте, я пробовал. Уже лучше по-лисповски. Даже мой пример в первом посте смотрится намного приятней, чем то, что предлагаете Вы.
Ну вот наш пример:
Предприятие Описание
Предприятие.Аппарат
Предприятие.Аппарат.Директор
Предприятие.Аппарат.Секретарь
Предприятие.Цех_программистов
Предприятие.Цех_программистов.Старш ая_обезьяна
Предприятие.Цех_программистов.Юнга
Предприятие.Цех_программистов.Техни чка

Конец описания
Ну напишите проще и понятней в XML. Я не говорю что мой вариант вообще шоколад, но объективней смотрится ловчей и пишется быстрей.
Цитата:
Graphviz?
Графы это надмножество деревов, но в целом вот как-то уже близко. Вопрос в том, чтобы:
а) Это не было геморройно для того чтобы писать ручками
б) Легко читалось неискушенным зрителем
Цитата:
Я бы отказался от тестового редактора для работы с ними, лучше хорошее средство с удобными действиями (те же перемещения по дереву плохо соответствуют тексту).
К сожалению это очень проблемно. Я как Саурон тайно 30 лет и три года строю свой язык программирования с блекджеком и девицами легкого поведения. А там все переменные деревья по умолчанию сразу из коробки. Вот есть в паскале например:
Код:
const a=5;
или там
Код:
var a: Integer;
, то есть объявление переменной/константы. А вот хочу также переменную-дерево объявить и описать.
Цитата:
По-другому никак.
С точки зрения правок запись деревьев в текст тоже не эффективна.
Угум. Но я мог бы использовать альясы например.
Предприятие Описание
Предприятие.Аппарат
Предприятие.Аппарат.Директор
Предприятие.Аппарат.Секретарь
Предприятие.Цех_программистов Как Цех
Цех.Старшая_обезьяна
Цех.Юнга
Цех.Техничка

Конец описания
Это конечно тоже не торт, но все же немного быстрей.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 26.05.2016 в 20:01.
Utkin вне форума Ответить с цитированием
Старый 26.05.2016, 19:21   #9
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Задача - создать язык описания дерева простым и понятным для человека способом.
А почему не хотите сделать графический интерфейс ввода дерева? Это удобнее чем описывать его текстово.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 26.05.2016, 19:23   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
а
.x
..y
..z
.y
Код:
Предприятие
.Аппарат
..Директор
...Секретарь
.Цех_программистов
..Старшая_обезьяна
..Юнга
..Техничка
..Чайник (эмалоированный)
Можно в excel-таблице со сдвигом по колонкам. Вероятность ошибок по сравнению с другими простыми способами небось самая маленькая будет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 26.05.2016 в 19:29.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод описания функции Flay Общие вопросы C/C++ 0 01.10.2013 14:12
файл описания ресурсов MasterSporta Win Api 4 08.07.2012 18:28
анализ описания переменных ALıya Паскаль, Turbo Pascal, PascalABC.NET 3 02.11.2011 21:43
описания алгоритма! Patriot_14 Помощь студентам 8 15.06.2011 23:32
ОПЕРЕЖАЮЩИЕ ОПИСАНИЯ ПРОЦЕДУР DRAgon™ Паскаль, Turbo Pascal, PascalABC.NET 13 11.06.2010 21:24