DRAKON.SU

Текущее время: Среда, 24 Апрель, 2024 21:32

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 281 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10, 11, 12 ... 15  След.
Автор Сообщение
СообщениеДобавлено: Среда, 12 Март, 2014 11:29 

Зарегистрирован: Среда, 13 Май, 2009 21:05
Сообщения: 153
Откуда: Саратов
Попробовал перенести текст программы просмотрщика файлов, созданных в DRAKON Editor в схемы этого же формата.
В принципе все получилось, но столкнулся с некоторыми сложностями.
Так, при обращении к БД строчка может быть о-о-о-чень длинной:
Код:
view eval { select * from vitems where branch_id =:branch_id and type = "branch"} val {set x [expr $val(x)-$shift]
if {$x > $lastbranchx} then {set lastbranchx $x}
                                                                                                                     set x1 [expr $x + $val(w)]
                                                                                                                     if {$x1 > $right_x} then {set right_x $x1}
                                                                                                                     draw_branch $val(text) $x $val(y) $val(h) $val(w)}


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 12 Март, 2014 11:29 

Зарегистрирован: Среда, 13 Май, 2009 21:05
Сообщения: 153
Откуда: Саратов
Попробовал перенести текст программы просмотрщика файлов, созданных в DRAKON Editor в схемы этого же формата.
В принципе все получилось, но столкнулся с некоторыми сложностями.
Так, при обращении к БД строчка может быть о-о-о-чень длинной. Поэтому для того, чтобы сделать текст читаемым, я его разбиваю на строчки, например так:
Код:
view eval { select * from vitems where branch_id =:branch_id and type = "branch"} val {set x [expr $val(x)-$shift]
if {$x > $lastbranchx} then {set lastbranchx $x}
set x1 [expr $x + $val(w)]
if {$x1 > $right_x} then {set right_x $x1}
draw_branch $val(text) $x $val(y) $val(h) $val(w)}

Но если эту строчку буквально перенести в DRAKON Editor в икону Action - вылетает ошибка. Приходиться все писать в одну строчку. В результате простейшая схема выглядит абсолютно неудобоваримо (пример - на картинке внизу). Сложные схемы создавать в такой ситуации - бессмысленно. Мне кажется, надо продумать возможность переноса длинных строк в иконе.

Второй момент, сопровождающийся генерацией ошибок при исполнении кода, вылетел, на который я не обращал внимания: в tcl если использовать switch, то текстовой блок не надо брать в кавычки:
Код:
proc draw {type text text2 x y h w a color} {
   switch $type {
      beginend {draw_beginend $text $x $y $h $w $a}
      branch  {draw_branch $text $x $y $h $w}
      address {draw_address $text $x $y $h $w}
                 ...
      default {draw_action "Не могу нарисовать" $x $y $h $w}
   }   
}

Однако в редакторе при использовании иконы "Выбор" генерируется последовательность операторов IF поэтому буквальный перенос кода из текста в схему дает ошибку, в иконе вариант в моем случае необходимо указывать не beginend, а "beginend". Если это не баг, а фича - ее нужно, наверное, задокументировать, чтобы народ не спотыкался на подобных вещах.


Вложения:
draw_normsizebranch.png
draw_normsizebranch.png [ 105.2 КБ | Просмотров: 14025 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 12 Март, 2014 12:26 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Бытко Сергей писал(а):
И еще вопрос - в руководстве http://drakon-editor.sourceforge.net/tcl/tcl.html нет указания как реализовать цикл while
Это возможно?

Цикл while называется в этом руководстве "Check-Do loop"
http://drakon-editor.sourceforge.net/tcl/tcl.html


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 12 Март, 2014 12:37 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Бытко Сергей писал(а):
У меня вопросы к Степану.
1. Есть ли какие-то мысли по поводу конструирования граф. интерфейса с использованием редактора при работе с tcl/tk? Или обходиться стандартной иконой "Действие" при описании элементов интерфейса?

Таких средств нет. Но они действительно очень нужны. Здесь, на форуме уже была дискуссия на эту тему.

Бытко Сергей писал(а):
2. Где можно указывать список файлов, текст которых нужно включить в программу?

В блоке header в описании файла. Например:
Код:
=== header ===
source file1.tcl
source file2.tcl


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 12 Март, 2014 13:48 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Бытко Сергей писал(а):
Но если эту строчку буквально перенести в DRAKON Editor в икону Action - вылетает ошибка. Приходиться все писать в одну строчку.

У меня ничего не вылетает. :(
Сергей, а ты Windows или Linux используешь?

Как форматировать код — личное дело каждого.
Вот я бы так записал:
Код:
view eval {
   select *
   from vitems
   where branch_id =:branch_id
   and type = "branch"
} val {
   set x [expr $val(x)-$shift]
   if {$x > $lastbranchx} then {set lastbranchx $x}
   set x1 [expr $x + $val(w)]
   if {$x1 > $right_x} then {set right_x $x1}
   draw_branch $val(text) $x $val(y) $val(h) $val(w)
}


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 12 Март, 2014 16:57 

Зарегистрирован: Среда, 13 Май, 2009 21:05
Сообщения: 153
Откуда: Саратов
Спасибо за помощь!
Я в линуксе сижу. Виндус маст дай))
Относительно ошибок в запросах... Я вчера копипастил текст из текстового редактора в схемы - и у меня вылетала куча ошибок именно в длинных строках. После того, как вручную убрал в Drakon Editore все табуляции и пробелы - все работает, даже вот сейчас строки разбивал произвольно... Не совсем понятно почему вылетали ошибки.. попробую локализовать эту ситуацию. Может что с кодировками спецсимволов...
PS
Попробовал навести красоту в большом куске кода и вот такая разбивка дает ошибку:
Код:
set lastaddressx 0
set lastbranchx 0
view eval {
   select min(x) as min_x
   from vitems where
   branch_id = :branch_id}
   {set min_x $min_x}
view eval {
   select max(w) as max_w
   from vitems where
   x = :min_x and
   branch_id = :branch_id and
   type != "horizontal" and
   type !="arrow"}
   {set max_w $max_w}
set shift [expr $min_x - $max_w - $right_x - $space]
set right_x [expr $min_x + $max_w - $shift]
set firstx [expr $min_x - $shift]
view eval {
   select * from vitems where
   branch_id =:branch_id and type = "horizontal"
   } val {
   set x [expr $val(x)-$shift];
   draw_horizontal   $x $val(y) $val(w)
   }
view eval {
   select * from vitems where
   branch_id =:branch_id and
   type = "vertical"
   } val {
   set x [expr $val(x)-$shift];
   if {$x > $right_x} then {set right_x $x};
   draw_vertical $x  $val(y) $val(h)
   }
view eval {
   select * from vitems
   where branch_id =:branch_id
   and type = "arrow"
   } val {
   set x [expr $val(x)-$shift];
   if {$x > $right_x}   then {set right_x $x};
   draw_arrow $x $val(y) $val(h) $val(w) $val(a)
   }
view eval {
   select * from vitems where
   branch_id =:branch_id
   and type = "address"
   } val {
   set x [expr $val(x)-$shift];
   if {$x > $lastaddressx} then
      {set lastaddressx $x};
   set x1 [expr $x + $val(w)];
   if {$x1 > $right_x} then
      {set right_x $x1};
    draw_address $val(text) $x $val(y) $val(h) $val(w)}
view eval {
   select * from vitems
   where branch_id =:branch_id
   and type = "branch"
   } val {
   set x [expr $val(x)-$shift];
   if {$x > $lastbranchx} then
      {set lastbranchx $x};
   set x1 [expr $x + $val(w)];
   if {$x1 > $right_x} then
      {set right_x $x1};
   draw_branch $val(text) $x $val(y) $val(h) $val(w)}
view eval {
   select * from vitems where
   branch_id =:branch_id and type != "horizontal"
   and type != "vertical" and type !="arrow"
   and type != "address" and type != "branch"
   } val {
   set x [expr $val(x)-$shift];
   set x1 [expr $x + $val(w)];
   if {$x1 > $right_x} then {set right_x $x1};
   draw $val(type) $val(text) $val(text2)
    $x $val(y) $val(h) $val(w) $val(a) $val(color)
   }
return "$right_x $lastaddressx $lastbranchx $firstx"

Вот прилагаю схему - ошибка из функции draw_normsizebranch


Вложения:
view.drn [54 КБ]
Скачиваний: 523
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 12 Март, 2014 17:55 

Зарегистрирован: Среда, 13 Май, 2009 21:05
Сообщения: 153
Откуда: Саратов
В связи с предыдущим сообщением возникла идея для Степана:
используя редактор дракон можно организовать макроподстановку таких громоздких текстов?
Например сделать икону, но не "вставка" а "макрос" - чтобы громоздкие тексты убирать в сторону, а сами макросы, например, в виде самостоятельной диаграммы, или еще как нибудь хранить...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 13 Март, 2014 20:00 

Зарегистрирован: Среда, 13 Май, 2009 21:05
Сообщения: 153
Откуда: Саратов
Что удалось локализовать:
Так работает:
Код:
view eval {
   select max(w) as max_w
   from vitems where
   x = :min_x and
   branch_id = :branch_id and
   type != "horizontal" and
   type !="arrow"
   } {set max_w $max_w}

А вот так уже нет:
Код:
view eval {
   select max(w) as max_w
   from vitems where
   x = :min_x and
   branch_id = :branch_id and
   type != "horizontal" and
   type !="arrow"
   }
   {set max_w $max_w}


Вот так работает:
Код:
view eval {
   select * from vitems where
   branch_id =:branch_id and
   type = "vertical"
   } val {
   set x [expr $val(x)-$shift];
   if {$x > $right_x} then {set right_x $x};
   draw_vertical $x  $val(y) $val(h)
   }

Вот так - не работает:
Код:
view eval {
   select * from vitems where
   branch_id =:branch_id and
   type = "vertical"
   } val {
   set x [expr $val(x)-$shift];
   if {$x > $right_x} then
   {set right_x $x};
   draw_vertical $x  $val(y) $val(h)
   }


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 17 Март, 2014 18:33 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
DRAKON Editor тут ни при чём.
Таковы правила языка Tcl.
Вот так можно:
Код:
if { $var == 3 } {
    puts $var
}

А вот так нельзя:
Код:
if { $var == 3 }
{
    puts $var
}

Любая конструкция — это Tcl-команда.
А команды нельзя переносить на следующую строку.

Исключения (последние символы в строке, после которых можно продолжать на следующей строке):
\ — знак переноса
{ — знак начала списка


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 20 Март, 2014 19:58 

Зарегистрирован: Среда, 13 Май, 2009 21:05
Сообщения: 153
Откуда: Саратов
Степан, спасибо за терпение и внимание!
Такой вопрос - возможен ли средствами редактора доступ к полю text2 элементов схемы, или может быть есть в плане?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 26 Март, 2014 08:50 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5851
Откуда: Москва
ЧТО СЛЕДУЕТ ПИСАТЬ В ИКОНЕ ЗАГОЛОВОК?

1. В иконе "Заголовок" разрешается писать точное СМЫСЛОВОЕ название алгоритма или программы. И больше ничего.

2. Степан Митькин (в нарушение этого правила) стал использовать икону "Заголовок" для других целей (в некоторых случаях). По-моему, это плохо. И не нужно.

3. Дополнительную информацию надо писать не в иконе "Заголовок", а в иконе "Формальные параметры". Мне кажется, так правильнее.

=======================
Приведу подтверждающий пример:

В сообщении viewtopic.php?p=85188#p85188 Степан Митькин писал(а):
Вот пример реального конечного автомата ....

Как указать, что диаграмма описывает автомат?
Для этого диаграмма должна иметь имя "state machine".


Я предлагаю писать имя state machine не в иконе "Заголовок", а в иконе "Формальные параметры"

===================

Если вы обнаружили недостаток или неточность в моем сообщении, просьба дать замечание.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 26 Март, 2014 12:23 

Зарегистрирован: Вторник, 13 Декабрь, 2011 15:31
Сообщения: 113
Владимир Паронджанов
Владимир Паронджанов писал(а):
ЧТО СЛЕДУЕТ ПИСАТЬ В ИКОНЕ ЗАГОЛОВОК?

1. В иконе "Заголовок" разрешается писать точное СМЫСЛОВОЕ название алгоритма или программы. И больше ничего.

2. Степан Митькин (в нарушение этого правила) стал использовать икону "Заголовок" для других целей (в некоторых случаях). По-моему, это плохо. И не нужно.

3. Дополнительную информацию надо писать не в иконе "Заголовок", а в иконе "Формальные параметры". Мне кажется, так правильнее.

=======================
Приведу подтверждающий пример:

В сообщении viewtopic.php?p=85188#p85188 Степан Митькин писал(а):
Вот пример реального конечного автомата ....

Как указать, что диаграмма описывает автомат?
Для этого диаграмма должна иметь имя "state machine".


Я предлагаю писать имя state machine не в иконе "Заголовок", а в иконе "Формальные параметры"

===================

Если вы обнаружили недостаток или неточность в моем сообщении, просьба дать замечание.


Допустим у нас имеются много ДРАКОН-схем в одном файле как например тут:
Изображение


Если мы одну из ДРАКОН-схем закомментируем, то нужно помнить какую именно мы закоментировали или просмотреть все параметры всех ДРАКОН-схем. А если в заголовке прямо указанно Comment_ , то нам не нужно искать какую именно ДРАКОН-схему мы законментировали. Я думаю так нагляднее. Например как тут:
Изображение


Также в случае с AutoHotkey, думаю удобно смотреть на список ДРАКОН-схем и сразу видеть к какому типу они принадлежат. Например как тут:
Изображение


Можно конечно это сделать по другому. Например, чтобы в списке ДРАКОН-схем перед каждым наименованием ДРАКОН-схемы отображалась иконка в зависимости от типа ДРАКОН-схемы и чтобы его тип можно было менять по правому клику из меню. Но в таком случае требуется изменение самого DRAKON Editor-а.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 26 Март, 2014 16:28 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5851
Откуда: Москва
В сообщении viewtopic.php?p=86918#p86918 vasili111 писал(а):
Можно конечно это сделать по другому. Например, чтобы в списке ДРАКОН-схем перед каждым наименованием ДРАКОН-схемы отображалась иконка в зависимости от типа ДРАКОН-схемы и чтобы его тип можно было менять по правому клику из меню. Но в таком случае требуется изменение самого DRAKON Editor-а.


Да, Вы правы, мое предложение подразумевает исправление DRAKON Editor-а.

Зачем это нужно?

На первое место я ставлю УДОБСТВО конечного пользователя, который пытается ПОНЯТЬ содержание дракон-схемы. А это ой как не просто.

Надо облегчить задачу понимания. Потому что это очень трудная задача.

Хочу напомнить, что Степан Митькин назвал свою работу о ДРАКОНе так:
Цитата:
DRAKON

The Human Revolution
in Understanding Programs

(Гуманитарная революция в понимании программ).
http://skylink.dl.sourceforge.net/proje ... DRAKON.pdf

Это совершенно правильное название. Смысл его в том, что программы трудны для понимания, а это плохо.

Нужно улучшить понимание. Но этого мало.
Нужно КАЧЕСТВЕННО улучшить понимание.

Нужна революция в понимании программ. Гуманитарная революция в понимании программ.

Задача ДРАКОНа — осуществить такую революцию.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 28 Март, 2014 14:27 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Бытко Сергей писал(а):
Степан, спасибо за терпение и внимание!
Такой вопрос - возможен ли средствами редактора доступ к полю text2 элементов схемы, или может быть есть в плане?

Поле text2 содержит "дополнительный" текст. Это верхний текст в иконах "полка", "ввод" и "вывод".
Чтобы отредактировать его, надо по нему дважды щёлкнуть мышкой или нажать F3.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 28 Март, 2014 21:27 

Зарегистрирован: Среда, 13 Май, 2009 21:05
Сообщения: 153
Откуда: Саратов
Степан Митькин писал(а):
Это верхний текст в иконах "полка", "ввод" и "вывод"

Это понятно. Внесу уточнение - это поле в файле drn присутствует для всех элементов, не только для перечисленных. И пропадает зря. А у меня мысль в каком направлении - использовать это поле для связи, например, с другими БД, в качестве источника дополнительной информации и т.п.
Вот об этом вопрос - можно ли его задействовать и для других икон?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 02 Апрель, 2014 12:31 

Зарегистрирован: Вторник, 13 Декабрь, 2011 15:31
Сообщения: 113
Возможно ли генерировать код из Переключателя такого или подобного типа?
Изображение

То есть мне надо, чтобы из Переключателя можно было генерировать код, где можно было бы задавать условия не просто a=1 , a=2 , a=3 , а иметь возможность задавать и другие условия например: a<5 , a<=2, a>5 , a>=2 , a>=1 || b<=3 && c<3 && d!=5


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 02 Апрель, 2014 14:34 

Зарегистрирован: Среда, 13 Май, 2009 21:05
Сообщения: 153
Откуда: Саратов
vasili111 писал(а):
Возможно ли генерировать код из Переключателя такого или подобного типа?

У меня все генерируется нормально. Правда для tcl/tc используется последовательность операторов if - else (хотя компактнее было бы использовать switch)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 02 Апрель, 2014 16:53 

Зарегистрирован: Вторник, 13 Декабрь, 2011 15:31
Сообщения: 113
Бытко Сергей писал(а):
vasili111 писал(а):
Возможно ли генерировать код из Переключателя такого или подобного типа?

У меня все генерируется нормально. Правда для tcl/tc используется последовательность операторов if - else (хотя компактнее было бы использовать switch)

Я попробовал генерировать диаграмму, которую привел выше в tcl/tc, но генерируется неправильно. То есть условие генерируется таким образом: В начале идет текст из иконы Выбор, далее символ == , а далее текст из иконы Вариант. То есть, задать любое условие не получается.
Не могли бы Вы пример, в котором Вы можете задавать любые условия в drn формате или в виде изображения прикрепить к Вашему сообщению. Благодарю.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 02 Апрель, 2014 19:15 

Зарегистрирован: Среда, 13 Май, 2009 21:05
Сообщения: 153
Откуда: Саратов
Да, действительно, эта конструкция не предполагает вычисления логических выражений. Надо просто if использовать


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 02 Апрель, 2014 23:31 

Зарегистрирован: Вторник, 13 Декабрь, 2011 15:31
Сообщения: 113
Бытко Сергей писал(а):
Да, действительно, эта конструкция не предполагает вычисления логических выражений.

Я попытаюсь это исправить.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 281 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10, 11, 12 ... 15  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2024, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB