Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт апр 19, 2024 09:08

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: SPF: невозврат. Ссылка вперёд. Бесконечный словестный цикл.
СообщениеДобавлено: Пн апр 02, 2007 11:14 
Не в сети

Зарегистрирован: Пт дек 29, 2006 15:32
Сообщения: 27
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Невозврат, по сути GOTO в ранее определённое слово. Получилось так:
Код:
: A R> DROP ." slovo A" ;
: B  A ." slovo B" ;
B
результат:
> slovo A

Может быть есть примитив заменяющий R> DROP, типа DROPR ? Конечно можно написать, но вдруг есть уже стандарт?

Cсылка вперёд. Классика рекомендует:
Код:
VARIABLE *B
: A   *B @ EXECUTE  ;
: B ." slovo B" ;  ' B *B !
A
результат:
> slovo B

Как-то неуклюже. Может есть спецсредства?

Всё вместе, бесконечный цикл без переполнения стеков вроде бы получился (A вызывает B, B вызывает A):
Код:
0 VALUE *B
: A R> DROP ." A" *B EXECUTE ;
: B R> DROP ." B"  A ; ' B TO *B
A (или B)
результат:
печатает AB (или ВА) бесконечно.

В общем, как бы всё это более изящно..
Для чего нужно: соответствие блок-схемам типа "ДРАКОН". Здесь слово из которого не возвращаются есть "ветвь". Ссылка вперёд - переход на другую ветвь. Всё вместе - "веточный цикл".


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: SPF: невозврат. Ссылка вперёд. Бесконечный словестный ци
СообщениеДобавлено: Пн апр 02, 2007 12:07 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
dvuugl писал(а):
Может быть есть примитив заменяющий R> DROP, типа DROPR ?


Есть RDROP смотри src\compiler\spf_inline.f

Цитата:

Cсылка вперёд. Классика рекомендует:
Код:
VARIABLE *B
: A   *B @ EXECUTE  ;
: B ." slovo B" ;  ' B *B !
A
результат:
> slovo B

Как-то неуклюже. Может есть спецсредства?


Код:
VECT A

: B ." slovo B" ;
' B TO A
A


Цитата:

Всё вместе, бесконечный цикл без переполнения стеков вроде бы получился (A вызывает B, B вызывает A):
Код:
0 VALUE *B
: A R> DROP ." A" *B EXECUTE ;
: B R> DROP ." B"  A ; ' B TO *B
A (или B)



Код:
0 VALUE *B
: A ." A" *B >R ;
: B ." B" ['] A >R ; ' B TO *B
B


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 02, 2007 12:18 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Цитата:
Cсылка вперёд. [...]
Как-то неуклюже. Может есть спецсредства?

Код:
VECT B
: A  B  ;
: (B) ." slovo B" ; 
' (B) TO B
A

R> DROP эквивалентно RDROP

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: SPF: невозврат. Ссылка вперёд. Бесконечный словестный ци
СообщениеДобавлено: Пн апр 02, 2007 14:05 
Mihail писал(а):
Код:
VECT A

: B ." slovo B" ;
' B TO A
A



или так

Код:
DEFER A

: B ." slovo B" ;
' B IS A
A


P.S. через DEFER и IS работает в Win32Forth


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 11, 2007 16:29 
А как можно в коде spf
ввести условный переход на метку

Пример
Код:
: name ( flag -- )
  LABEL @0
             IFBRANCH @1
             ...
             BRANCH @2
  LABEL @1
             ...
  LABEL @2
             ...
            BRANCH @0
;


P.S. Мне именно так и нужно:)


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 11, 2007 17:41 
Можно. Реализаций можно предъявить десятки только с ходу.

Но зачем?.. Можно обосновать необходимость применения именно такого способа?..


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт апр 12, 2007 07:03 
profiT писал(а):
Можно. Реализаций можно предъявить десятки только с ходу.

Но зачем?.. Можно обосновать необходимость применения именно такого способа?..


Это нужно для выполнения промежуточного кода прошедшего через LCC + front-end
(от MPE ) в spf. Углублятся в LCC как использовал Mihail нет еще необходимости
или править front-end для приведения к структурному коду.

P.S. Реализацию условного и неусловного GOTO можно сделать свою,
но хочется иметь наиболее адекватную для spf. Промежуточный код будет
оптимизироваться по заданным критериям ( подобие ручного распределения
ресурсов проца в его модели по словам и выбора нужной модели рантайма)
Промежуточный код - это в той или иной степени почти Фортовский код.
В оптимизаторе планирую задействовать распределенный парсер.:)


Вернуться к началу
  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


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

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB