Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср апр 24, 2024 07:12

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Автомат-сканер текста и таблицы решений -- chartable.f
Автор Сообщение
  Заголовок сообщения:   Ответить с цитатой
---
Сообщение Добавлено: Ср авг 01, 2007 08:55
  Заголовок сообщения:   Ответить с цитатой
Гм, вот тут мне подумалось, ведь можно словарь рассматривать, как некий конечный автомат 8)
И так далее...

А вообще я так и не понял, чем предложенное Азаматом лучше, чем SWITCH ... ENDSWITCH из SMAL32 и кажется были с подобным названием же буржуйские реализации?
Кстати в ту же степь идет тема с множественными DOES> что лично мне уже гораздо интереснее 8)
хотя простой реализации я пока что так и не придумал 8(
но всему свое время 8)
Сообщение Добавлено: Ср авг 01, 2007 07:37
  Заголовок сообщения:   Ответить с цитатой
Цитата:
Осторожно!.. Мечу бисер.
не все и не всегда в состояни распознать бисер
Сообщение Добавлено: Пт июл 27, 2007 01:37
  Заголовок сообщения:   Ответить с цитатой
---
Сообщение Добавлено: Чт июл 26, 2007 23:26
  Заголовок сообщения:   Ответить с цитатой
Так там, кажется, речь шла о перебивке ядра на русский. Это плохо из-за неоднозначности и удобства "каждому по-своему". А в своем проекте, не предназначенном для всех-всех-всех, переменные почему бы не по-русски? И самому удобно, и во время отладки-обсуждения можно коллегам показывать не в стиле "вот честное слово, тут работает!", а обычный русский текст, из которого и семантика ясна.
Сообщение Добавлено: Чт июл 26, 2007 23:20
  Заголовок сообщения:   Ответить с цитатой
---
Сообщение Добавлено: Чт июл 26, 2007 23:15
  Заголовок сообщения:   Ответить с цитатой
Цитата:
Наработка уже немножко выросла из коротких штанишек (хотя и не избавилась до конца от своих родовых, студенческих пятен — например, имён переменных и процедур на русском языке [sic!],

:))
А мне тааак нравится по-русски писать!... :pilot2;

Думается, родовые студенческие пятна - они несколько другие ;)
Сообщение Добавлено: Чт июл 26, 2007 23:08
  Заголовок сообщения:   Ответить с цитатой
---
Сообщение Добавлено: Чт июл 26, 2007 22:48
  Заголовок сообщения:   Ответить с цитатой
Конечные автоматы на деревьях:

dr-klm писал(а):
Эти автоматы -- FTA (Finite Tree Automation), NFTA (Non-deterministic FTA), DFTA (Deterministic FTA) являются обобщением конечных автоматов (FA, NFA, DFA), работающих со строками (т.е. с линейным входом), на случай, когда вход автомата представляет собой дерево. В основном используются в теории (и практике реализации) компиляторов (для генерации кода и оптимизации).

...

Парсеры делаются на обычных автоматах. Исходный текст -- строка, результат -- дерево. При помощи этих автоматов деревья удобно "окучивать". ;-)
Сообщение Добавлено: Пт фев 09, 2007 23:28
  Заголовок сообщения:   Ответить с цитатой
Несколько улучшенный вариант предыдущей FSM, более структурный. к структуре можно добавлять
различные поля: семафоры, флаги, ссылки на родительскую FSM и т.д.

Код:
S" locals.f"      INCLUDED

: ?ALLOT HERE SWAP ALLOT ;

   0
CELL  -- states
CELL  -- inputs
CELL  -- vexec
CELL  -- vnext
CONSTANT fsm0


CREATE tFSM fsm0 ALLOT


: FSM: { Ns Ni ptr \ m }

  Ns Ni * CELLS -> m

  m ?ALLOT ptr vexec  !
                     
  m ?ALLOT ptr vnext  !

        Ni ptr inputs !

ptr 0  ;



\ terminated definitions of FSM

: FSM; 2DROP ;

\ execute one step in FSM (ptr) with input N

: [cur]  ( ptr -- cur ) DUP states @ SWAP inputs @ CELLS * ;

: FSM! ( N ptr -- )  { ptr \ org }

( N )  CELLS ptr [cur] + -> org

             ptr vexec @ org + @ EXECUTE

             ptr vnext @ org + @ ptr states ! 

;

: [[ ( ptr org -- ptr org' )     OVER vexec @ OVER + '  SWAP ! ;

: ]] ( ptr org N -- ptr org ) >R OVER vnext @ OVER + R> SWAP ! CELL+ ;

: |  ]] [[ ;

\ set state FSM -- 0 ptr states ! ; get state FSM -- ptr states @

\ === EXAMPLE ============================================

: DIGIT? ( N -- FLAG) [CHAR] 0 [CHAR] : WITHIN ;
: DP? ( N --FLAG ) [CHAR] . = ;
: MINUS? ( N --FLAG) [CHAR] - = ;

: CAT->COL# ( C -- N )
  DUP  DIGIT? 1 AND                 \ DIGIT -> 1
  OVER MINUS? 2 AND +               \     - -> 2
  SWAP    DP? 3 AND +               \    DP -> 3
;                                   \ OTHER -> 0

3 4 tFSM FSM:
\                i  n  p  u  t  s
\
\ state:    other?   digit?   minus?    dp?
\                       
  ( 0 )  [[ DROP 0 | EMIT 1 | EMIT 1 | EMIT 2 ]]
  ( 1 )  [[ DROP 1 | EMIT 1 | DROP 1 | EMIT 2 ]]
  ( 2 )  [[ DROP 2 | EMIT 2 | DROP 2 | DROP 2 ]]
FSM;

: AAA

0 tFSM states !

   BEGIN
    KEY DUP 13 <> OVER 10 <> AND
   WHILE
    DUP CAT->COL# tFSM FSM!
   REPEAT

DROP

;

Сообщение Добавлено: Чт янв 04, 2007 11:12
  Заголовок сообщения:   Ответить с цитатой
Привет, адаптация FSM (конечного автомата) от J.V.Noble под spf4

Код:
\ =============================================================================
\ FSM Records                                          M=NSTATES*NINPUTS
\ ptr -++- to FSM
\      ||
\      \/
\
\  | FSM states | FSM inputs | exec-word1 | next-state1 | . . . | exec-wordM | next-stateM |
\ =============================================================================


: ?ALLOT HERE SWAP ALLOT ;


: FSM: ( NSTATES NINPUTS -- )
  CREATE 2DUP * CELLS 2* 2 CELLS + ?ALLOT DUP >R CELL+ ! DROP R> 2 CELLS + ;

\ terminated definitions of FSM

: FSM; DROP ;

\ execute one step in FSM (ptr) with input N

: FSM! ( N ptr -- ) DUP >R 2@ * +  2* 2+ CELLS R@ + DUP >R @ EXECUTE R> CELL+ @ R> ! ;

: [[ ( ADDR1 -- ADDR2 ) ' OVER ! CELL+ ;
: ]] ( ADDR2 N -- ADDR3 ) OVER ! CELL+ ;
: |  ]] [[ ;


\ === EXAMPLE ============================================


\ : WITHIN OVER - >R - R> U< ;

: DIGIT? ( N -- FLAG) [CHAR] 0 [CHAR] : WITHIN ;
: DP? ( N --FLAG ) [CHAR] . = ;
: MINUS? ( N --FLAG) [CHAR] - = ;

: CAT->COL# ( C -- N )
  DUP  DIGIT? 1 AND                 \ DIGIT -> 1
  OVER MINUS? 2 AND +               \     - -> 2
  SWAP    DP? 3 AND +               \    DP -> 3
;                                   \ OTHER -> 0

3 4 FSM: <FIXED>
\                i  n  p  u  t  s
\
\ state:    other?   digit?   minus?    dp?
\                       
  ( 0 )  [[ DROP 0 | EMIT 1 | EMIT 1 | EMIT 2 ]]
  ( 1 )  [[ DROP 1 | EMIT 1 | DROP 1 | EMIT 2 ]]
  ( 2 )  [[ DROP 2 | EMIT 2 | DROP 2 | DROP 2 ]]
FSM;

: AAA
  0 <FIXED> !
   BEGIN
    KEY DUP 13 <> OVER 10 <> AND
   WHILE
    DUP CAT->COL# <FIXED> FSM!
   REPEAT
DROP ;
Сообщение Добавлено: Чт янв 04, 2007 11:06
  Заголовок сообщения:   Ответить с цитатой
Пример использования. Сразу двойной.

Дано: желание почитать в выходные (сегодня) книжку. У книжки формат [url=http://www.fictionbook.org/index.php/FictionBook_2.0_-_краткая_информация]FB2[/url]. С форматом этим я борюсь спец. XSL-преобразователем, который делает мне из файла Word'овский файл с нужным мне форматированием для распечатки (альбомная ориентация, три колонки, расстановка переносов, оформление заголовков и абзацов). И всё бы хорошо если бы не иллюстрации. В FB2 они внедряются в исходный текст, в тэг binary через base64. Раньше обходился и вручную вставлял картинку, но у сегодняшней книжки туча иллюстраций.

Хорошо, за два часа программа слеплена и я могу печатать и зачитываться:

Код:
REQUIRE FILE ~ac/lib/str4.f
REQUIRE открыть-тэг ~profit/lib/xmlscanner.f
REQUIRE COMPARE-U ~ac/lib/string/compare-u.f
REQUIRE base64 ~ac/lib/string/conv.f
REQUIRE split ~profit/lib/bac4th-str.f
REQUIRE взять-параметр ~profit/lib/parsecommand.f

REQUIRE ZPLACE ~nn/lib/az.f
CREATE tmp 100 ALLOT

0 VALUE двоичный-тэг?
0 VALUE вывод

:NONAME S" binary" COMPARE-U 0= TO двоичный-тэг? ; TO открыть-тэг

:NONAME двоичный-тэг? IF
S" id" COMPARE-U 0= IF убрать-кавычки

вывод IF вывод CLOSE-FILE THROW THEN

tmp ZPLACE
tmp ASCIIZ> R/W CREATE-FILE THROW TO вывод

ELSE 2DROP THEN ELSE 2DROP 2DROP THEN ; TO внести-атрибут
:NONAME двоичный-тэг? IF ( addr u )
START{ byRows split \ из текста нужно убрать переводы строк
DUP STR@ debase64 вывод WRITE-FILE THROW
}EMERGE
ELSE 2DROP THEN ; TO внести-текст


: вычленить-изображения ( addr u -- ) 1 TO размер-символа SWAP поставить-курсор в-тексте -символов-обработать ;

:NONAME
GetCommandLineA начать-обрабатывать-командную-строку
взять-параметр 2DROP
взять-параметр FILE вычленить-изображения BYE ;
MAINX ! 0 TO SPF-INIT? TRUE TO ?GUI S" extractImg.exe" SAVE BYE


На вход командной строки получает имя FB2-файла, и если в его дереве есть узлы с именем "binary", то их текстовое содержимое будет раскодировано из base64 и положено в файлы с названием из атрибута "id" этого узла.

Сканер используется и в ~profit/lib/parsecommand.f, и в ~profit/lib/xmlscanner.f (да, я знаю что этот недо-сканер неправильно обрабатывает тэги вида "<tag />").
Сообщение Добавлено: Пн дек 18, 2006 22:13
  Заголовок сообщения:   Ответить с цитатой
Цитата:
И наконец залить всё на CVS.

Вчера.
Сообщение Добавлено: Ср окт 11, 2006 23:05
  Заголовок сообщения:   Ответить с цитатой
Цитата:
Я просмотрел или как добыть текущий символ, т.е. например в ветке все: как узнать что за символ сейчас в автомате?


Есть слово "символ" (самое первое определение в библиотеке).


Цитата:
Стековых комментариев добавить.
...
Оформить в виде модуля.
Угу.

Цитата:
Примеры (те что в этом треде) добавить в саму либу.

Чего-то мне кажется что немножко большие примеры, впрочем ладно.

Цитата:
И наконец залить всё на CVS.

Там сперва нужно обеспечить собственно работоспособность. То есть нужно будет тянуть несколько доп. библиотек. Потом, я там недавно поломал функционал, увлёкшись FOR.. NEXT. Когда отеложу вдоль и поперёк, тогда и выложу спокойно.

Опять же меня ещё тревожит вопрос о языке (русские названия слов), но это уже другая немного тема...
Сообщение Добавлено: Ср окт 04, 2006 19:07
  Заголовок сообщения:   Ответить с цитатой
Я просмотрел или как добыть текущий символ, т.е. например в ветке все: как узнать что за символ сейчас в автомате?
Например так
Код:
: этот-символ отсюда размер-символа - размер-символа взять-букву ;


Пожелания:
Стековых комментариев добавить.
Примеры (те что в этом треде) добавить в саму либу.
Оформить в виде модуля.
И наконец залить всё на CVS.
Сообщение Добавлено: Ср окт 04, 2006 17:32

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


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