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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2011, 09:32   #1
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию Описание дерева

Требуется помощь в разработке описания по которому можно было бы быстро построить дерево строк. Каждый элемент которого либо узел либо строка. Данный язык описаний предназначен для того, чтобы программист мог быстро написать дерево в программе на этапе ее разработки (в противоположность этапу выполнения программы). Хочу использовать деревья строк в качестве объектов для одного интерпретатора . Так вот, строить дерево динамически иногда не совсем удобно, имеется потребность получить готовое без лишних телодвижений со стороны программиста. В самом интерпретаторе предполагаю пару операторов (наподобие блока {} или begin-end) между которыми и будет находится описание дерева (интерпретатор перед стартом сканирует программу один раз).
Жду ваших предложений и дельных советов .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 08.09.2011, 10:18   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Можно не выдумывать велосипед, а воспользоваться xml форматом описания данных. Все равно описание древовидной структуры к чему нибудь подобному сведется. А здесь очевидное достоинство - данные подготовленные таким образом можно просматривать-редактировать существующими средствами
Код:
<?xml version="1.0" encoding="windows-1251"?>
<document>
  <unit>текст_1
    <unit>текст_11
      <scheet>текст_11_1</scheet>
      <scheet>текст_11_2</scheet>
    </unit>
    <unit>текст_12
      <scheet>текст_12_1</scheet>
    </unit>
  </unit>
  <scheet>текст_1</scheet>
  <unit>текст_2
    <scheet>текст_2_1</scheet>
    <scheet>текст_2_2</scheet>
  </unit>
</document>
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.09.2011, 10:26   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Увы, нет . Структура дерева действительно во многом будет напоминать XML. Но XML громоздкий формат. Он отлично подходит для межпрограммного обмена, но неудобен когда его нужно будет писать ручками.
Ну Ваш пример:
Цитата:
документ>текст_1>текст_11>текст_11_ 1, текст_11_2
документ>текст_1>текст_12>текст_12_ 1
документ>текст_2>текст_2_1, текст_2_2
Вопрос - что написать быстрей? Ваш вариант или мой?

Насчет просмотра - это будет файл программы. Попробую объяснить подробней - то как объявление record в Дельфи, struct в С++ и т.д. То есть объявление дерева предполагается именно внутри исходного текста программы на другом языке.

Можно попробовать вариант с символическими заменами, например:
Цитата:
документ>текст_1>>>абв
абв>>текст_11>текст_11_1, текст_11_2
абв>>текст_12>текст_12_1
документ>текст_2>текст_2_1, текст_2_2
Естественно синтаксис от балды, можно поискать что-нибудь по энергомичней. Счас главное принципы наглядности и удобства написания.

Еще одна причина против XML - все равно переводить во внутренний формат. Предполагаются операции которые обычно не реализовывают стандартные парсеры.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 08.09.2011 в 10:45.
Utkin вне форума Ответить с цитированием
Старый 08.09.2011, 10:49   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

если честно, я совсем не понял, что именно нужно ) но чем обычные скобочки не устраивают?

PHP код:
document
{
  
unit
  
{
    
текст 1,
    
unit
    
{
      
текст 11,
      
scheet текст 11 1 }
      
scheet текст 11 2 }
      
текст 12,
      
текст 13
    
}
    
unit
    
{
      
текст 12,
      
scheet текст 12 1aтекст 12 1b }
      
текст 13,
    }
  }
  
scheet текст 2 }
  
unit 
  

    
текст 3,
    
scheet текст 3 1 }
    
scheet текст 3 2 }
  }

(с запятой в тексте можно что-то придумать, чтобы отличать запятую внутри и в конце строки. Или другой символ взять).
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 08.09.2011, 12:00   #5
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Utkin
Цитата:
Вопрос - что написать быстрей? Ваш вариант или мой?
Добавь в копилку ещё один вопрос: "какой формат понятнее?", xml явно выигрывает у твоего.

Цитата:
То есть объявление дерева предполагается именно внутри исходного текста программы на другом языке.
Ну и пускай галочки "<>" будут зарезервированы для xml-ных дел.
the_deer_one вне форума Ответить с цитированием
Старый 08.09.2011, 12:36   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

JSON? ProtoBuf?

p.s. не стоит создавать свое в этой ситуации, если только не ради опыта.
BOBAH13 вне форума Ответить с цитированием
Старый 08.09.2011, 12:44   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Цитата:
p.s. не стоит создавать свое в этой ситуации, если только не ради опыта.
Честно говоря ради опыта тоже . Но хотелось бы получить инструмент, которым бы стал пользоваться не только я лично...
Цитата:
Добавь в копилку ещё один вопрос: "какой формат понятнее?", xml явно выигрывает у твоего.
Да, это есть, но здесь наверно такой случай когда нельзя достичь абсолютного совершенства. Кроме того, xml не удобен для написания больших деревьев.

Цитата:
если честно, я совсем не понял, что именно нужно ) но чем обычные скобочки не устраивают?
Речь не о элементах синтаксиса. А о способе описания данных. Пусть будут скобки вместо знака > сейчас это не принципиально.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 08.09.2011 в 12:50.
Utkin вне форума Ответить с цитированием
Старый 08.09.2011, 12:50   #8
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Предлагаю:

Код:
tree name_tree {  //Название у дерева, если их несколько
  name branch {	  //название у веток, для более быстрого доступа
     /* данные которые содержатся в ветке */
     	name1: данные;
	name2: данные;
	name3: данные;
  }

  name branch2 {	  
     /* данные которые содержатся в ветке */
     	name branch3 {
	  name2: данные;
	  name3: данные;
	}
	: данные;    //ветки без названия
	: данные;
  }
}
1) Имя у дереьев если их может быть несколько штук.
2) Названия веток, чтобы потом можно было быстро к нужной ветке обратится name_tree->branch
3) Обращение к данным ветки вроде числового массива и ассоциативного пример:
name_tree->branch2[0];
name_tree->branch2[1];
Обращение к ассоциативному массиву:
name_tree->branch:name1; ну или так name_tree->branch['name1'];
4) Доступ к 3ей ветке (двойная вложенность). Имена веток должны быть уникальными по этому:
name_tree->branch3[0];
dr.Chas вне форума Ответить с цитированием
Старый 08.09.2011, 12:57   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Цитата:
JSON
Почитал, да. Что-то подобное. Только применительно к моим данным.

Цитата:
1) Имя у дереьев если их может быть несколько штук.
Да.

Цитата:
3) Обращение к данным ветки вроде числового массива и ассоциативного пример:
И это тоже. Что-то подобное предусмотренно в операциях по работе с деревьями.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 08.09.2011, 13:04   #10
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Цитата:
документ>текст_1>текст_11>текст_11_ 1, текст_11_2
документ>текст_1>текст_12>текст_12_ 1
документ>текст_2>текст_2_1, текст_2_2
Сразу нет, я когда-то так данные для GraphViz руками набивал, там похожий подход - долго потом приходится искать ошибку из-за 1 опечатки + постоянно повторяется путь до корня.

Цитата:
инструмент, которым бы стал пользоваться не только я лично
Тогда лучше что-то, чем уже пользуются. Выше предложили JSON, по-моему вполне подходит.
пыщь
JTG вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сохранение дерева demonara Помощь студентам 3 03.01.2011 12:35
Описание структуры данных n-арного (k-ичного) дерева Gonzo Общие вопросы Delphi 10 23.09.2010 08:05
Прорисовка дерева yulia Общие вопросы по Java, Java SE, Kotlin 3 02.11.2008 23:19
Глубина дерева Иллидан Паскаль, Turbo Pascal, PascalABC.NET 1 29.03.2008 11:36
обход дерева ribka Помощь студентам 2 11.12.2007 20:38