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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Smal32 - подобная реализация конечных автоматов
СообщениеДобавлено: Вт янв 08, 2008 16:39 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Пример использования:
<pre>
: invalid_entry ." invalid entry" CR ;
: 1st ." 1st table entry" CR ;
: 2st ." 1st table entry" CR ;
: 3st ." 1st table entry" CR ;
: 4st ." 1st table entry" CR ;

3 SWITCH: invalid_entry 1st 2st 3st 4st ;SWITCH

\ или так:
: sample SWITCH: invalid_entry 1st 2st 3st 4st ;SWITCH ;
0 sample
1 sample
-1 sample
4 sample
3 sample
</pre>

Код:
\ 2008-01-08 ~mOleg
\ Сopyright [C] 2008 mOleg mininoleg@yahoo.com
\ выбор варианта по номеру (конечный автомат)

REQUIRE init:          .\devel\~mOleg\lib\util\run.f
REQUIRE imm_word       .\devel\~moleg\lib\newfind\search.f
REQUIRE COMPILE        .\devel\~moleg\lib\util\compile.f
REQUIRE NEXT-WORD      .\devel\~mOleg\lib\util\parser.f

\ выбрать u-тый вариант из списка слов,
\ полученных между SWITCH: err_name namea nameb ... ;SWITCH
: (switch) ( u --> )
           ADDR * R@ @ OVER CELL + SWAP 0 SWAP WITHIN
           IF R@ + [ 2 CELLS ] LITERAL
            ELSE DROP R@ CELL
           THEN + A@ EXECUTE
           R> DUP @ + CELL + >R ;

\ маркер оканчивает секцию SWITCH: ;ENDSWITCH
: ;SWITCH ( --> ) ." ;SWITCH without SWITCH:" TYPE -1 THROW  ; IMMEDIATE

\ начинает секцию SWITCH: ;SWITCH
: SWITCH: ( --> )
          STATE @ IFNOT init: THEN 5 controls +!
          COMPILE (switch) <MARK 1 0 A,
          BEGIN NEXT-WORD DUP WHILE
                SFIND DUP IFNOT -1 THROW THEN    \ если слово не найдено
                imm_word = WHILENOT
              A,
            REPEAT ['] ;SWITCH = IFNOT -1 THROW THEN
          THEN >RESOLVE
          -5 controls +!
          controls @ IFNOT [COMPILE] ;stop THEN
          ; IMMEDIATE

\ первое слово после SWITCH: выполняется в случае выхода за диапазон

?DEFINED test{ \EOF -- тестовая секция ---------------------------------------

test{ : inv 123 ; : 1st 234 ; : 2st 345 ; : 3st 456 ; : 4st 567 ;
      : test SWITCH: inv 1st 2st 3st 4st ;SWITCH 678 ;
      0 test 234 678 D= 0= THROW
      1 test 345 678 D= 0= THROW
      2 test 456 678 D= 0= THROW
      3 test 567 678 D= 0= THROW
      4 test 123 678 D= 0= THROW
     -1 test 123 678 D= 0= THROW
      2 SWITCH: inv 1st 2st 3st 4st ;SWITCH 456 <> THROW
  S" passed" TYPE
}test

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср янв 09, 2008 01:07 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
А что тут smal-32 - подобное?

И нельзя ли прокомментировать текст так, чтобы было понятно не самым понятливым :( , что это именно конечный автомат

offtop: в документах к fork обнаружил идею делать не только слова 1+ 2+ и т.п. как в обычном Форте, но вообще заставить интерпретатор распознавать любое слово типа 111111111+ или 333* (число с оператором в конце) - чья это идея?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср янв 09, 2008 12:52 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
вопрос писал(а):
А что тут smal-32 - подобное?

гм. Синтаксис. В смал32, правда, оно так выглядит:
( n --> ) SWITCH: a b c ... END-SWITCH
при этом может использоваться только внутри определений.
И в smal32 первое слово в перечислении, вроде, не ловило выходы за пределы диапазона выбора.

вопрос писал(а):
И нельзя ли прокомментировать текст так, чтобы было понятно не самым понятливым , что это именно конечный автомат

да, на самом деле, это не конечный автомат, а таблица, на основе которой, можно его реализовать (то есть часть его).
То есть есть набор слов, из которых можно выбитать вариант действия по его номеру - пример есть выше.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Последний раз редактировалось mOleg Ср янв 09, 2008 14:54, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср янв 09, 2008 12:58 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
вопрос писал(а):
offtop: в документах к fork обнаружил идею делать не только слова 1+ 2+ и т.п. как в обычном Форте, но вообще заставить интерпретатор распознавать любое слово типа 111111111+ или 333* (число с оператором в конце) - чья это идея?

В дальнейшем, задавайте вопросы по форку в ветке форка 8) пожалуйста!
Я там на этот вопрос отвечу.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср янв 09, 2008 13:13 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Код:
\ пример простого циклического автомата:

  VECT a VECT b VECT c

: error ." invalid state" CR ;

: (a) ." state a" CR KEY 49 - SWITCH: error b c ;SWITCH ;
: (b) ." state b" CR KEY 49 - SWITCH: error c a ;SWITCH ;
: (c) ." state c" CR KEY 49 - SWITCH: error a b ;SWITCH ;

' (a) TO a
' (b) TO b
' (c) TO c


дальше набираем в консоли любую из: a b или c
и нажимаем клавиши 1 или 2 8)

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср янв 09, 2008 17:48 
---


Последний раз редактировалось profiT Пт фев 29, 2008 23:53, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт янв 10, 2008 15:10 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
profiT писал(а):
http://ru.wikipedia.org/wiki/Конечный_автомат

!!!

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

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


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

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


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

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