Forth
http://fforum.winglion.ru/

*преобразование скобочной записи в постфикс
http://fforum.winglion.ru/viewtopic.php?f=19&t=1509
Страница 7 из 10

Автор:  _Harry [ Чт июл 08, 2010 18:12 ]
Заголовок сообщения:  Re: *преобразование скобочной записи в постфикс

_Harry писал(а):
Опять к mOleg
Еще одна неприятная особенность (или особенная неприятность :wink: )>postfix-а.
Если делать его между CREATE и DOES> то получаем исключение во время создания слова.
Пример:
Код:
\ Распечатать строку со счетчиком ( CELL )
: @type ( addr -- ) DUP CELL + SWAP @ TYPE ;

\ Демонстрационное слово
: #def1 ( /name /expression -- ) CREATE
        0 , HERE A>L
        Cr_ PARSE
        >postfix  \ Здесь  происходит сбой при поытке создания слова
        DUP ALLOT
        TUCK AL@ SWAP CMOVE AL> CELL - !
        DOES> @type ;

\ Демонстрационное слово
: #def2 ( /name /expression -- ) NextWord
        Cr_ PARSE >postfix DSWAP  \ Когда постфикс здесь то все работает
        CREATED 0 , HERE A>L
        DUP ALLOT
        TUCK AL@ SWAP CMOVE AL> CELL - !
        DOES> @type ;
Причем в этом случае буфер не причем
(пробовал вместо >postfix создавать буфер и копировать в него строку - исключения нет)
:?: :?: :?: "Ну непонятно....." :?: :?: :?:
Да и если убрать секцию DOES> то оба слова работают.

Автор:  вопрос [ Чт июл 08, 2010 18:30 ]
Заголовок сообщения:  Re: *преобразование скобочной записи в постфикс

Можно взять мой пример - он как раз рабочий под разные языки
нужно только задать образец

Автор:  mOleg [ Чт июл 08, 2010 18:47 ]
Заголовок сообщения:  Re: *преобразование скобочной записи в постфикс

_Harry писал(а):
Еще одна неприятная особенность (или особенная неприятность )>postfix-а.

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

Автор:  _Harry [ Чт июл 08, 2010 19:21 ]
Заголовок сообщения:  Re: *преобразование скобочной записи в постфикс

В предыдущем моем посте была ошибка в коде def1 и def2 (исправлено)
правда это не меняет дела.

Автор:  mOleg [ Чт июл 08, 2010 19:36 ]
Заголовок сообщения:  Re: *преобразование скобочной записи в постфикс

проблема в
: ExitSource ( --> )
ON-SOURCE-EXIT
;CREATE
CURSRC A@ CloseSource
*IF DUP CURSRC A! TO system_buff ;THEN
STRING" Исчерпание входных источников!"
>STDERR BYE ;

а именно в ;CREATE , которое завершает создание текущего определения, после чего HERE становится недействителен.
Я боролся с определениями в конце файлового потока, и просмотрел возможность использование ExitSource для трансляции строки внутри определения. Подумаю, как исправить.

и тут сразу понятно, почему второй пример ошибки не вызывает, ведь строка разбирается до начала содания определения ;)

Автор:  mOleg [ Чт июл 08, 2010 19:44 ]
Заголовок сообщения:  Re: *преобразование скобочной записи в постфикс

вобщем, самый простой способ, закоментировать строку с ;CREATE и пересобрать систему. Возможно с буфером такая же проблема была, однако, с последним разбираться буду на выходных.

Автор:  _Harry [ Чт июл 08, 2010 22:57 ]
Заголовок сообщения:  Re: *преобразование скобочной записи в постфикс

mOleg писал(а):
неа, зачем? мне и так нравится

Хм ну если это рассматривать только как конкурсную задачку то да.
А я то с прицелом на практическое использование...
И такие вольности будут настоящей миной замедленного действия.
Ну да ладно все равно доработать много чего придётся. :roll:

Вот что за проблема с буфером и чем строка из Buffer> отличаются от строки из S>HEAP
просто таки загадка века. :?:

Автор:  mOleg [ Пт июл 09, 2010 04:39 ]
Заголовок сообщения:  Re: *преобразование скобочной записи в постфикс

_Harry писал(а):
А я то с прицелом на практическое использование...

достаточно закоментировать одну строчку:
: : BOX[ 1 B, s" !" S", ]BOX twoseater ; \ правое присвоение: x=>y
и не будет этого самого : ;)

_Harry писал(а):
Вот что за проблема с буфером и чем строка из Buffer> отличаются от строки из S>HEAP просто таки загадка века.

я же сказал, разберусь ;)

Автор:  _Harry [ Пт июл 09, 2010 10:15 ]
Заголовок сообщения:  Re: *преобразование скобочной записи в постфикс

mOleg писал(а):
достаточно закоментировать одну строчку:

Ну и еще кое что закоментировать придется. :wink: Это как раз не проблема,
а вот надо какие то проверки на корректность добалять.
Например выражение s" a+=b" будет обработано связкой >postfix EVALUATE
не по Си-шным правилам. Хотя в моем случае появление такого выражения и подобных ему должно вызывать ошибку.

mOleg писал(а):
я же сказал, разберусь

А никто и не сомневался :wink:

Автор:  mOleg [ Пт июл 09, 2010 14:37 ]
Заголовок сообщения:  Re: *преобразование скобочной записи в постфикс

_Harry писал(а):
Ну и еще кое что закоментировать придется. Это как раз не проблема,

на самом деле проблема, я пока не придумал, как бы получше обойти косяк с ;CREATE .
_Harry писал(а):
а вот надо какие то проверки на корректность добалять.

дело в том, что я не думал парсить сишный текст, наоборот, я думал о том, что не плохо было бы иногда в Форте иметь возможность иметь возможность прямой записи, т.е. шутки типа OVER+DUP* должны работать, т.е.: OVER DUP * +
;) что же до ошибок, то ловить их можно, для этого надо анализировать состояние стека операторов на выходе.
проблема в том, что количество входных и выходных параметров контролировать невозможно.

_Harry писал(а):
Например выражение s" a+=b" будет обработано связкой >postfix EVALUATEне по Си-шным правилам. Хотя в моем случае появление такого выражения и подобных ему должно вызывать ошибку.

тогда нужно начинать с сишного парсера..

Автор:  _Harry [ Пт июл 09, 2010 16:13 ]
Заголовок сообщения:  Re: *преобразование скобочной записи в постфикс

mOleg писал(а):
я думал о том, что не плохо было бы иногда в Форте иметь возможность иметь возможность прямой записи, т.е. шутки типа OVER+DUP* должны работать, т.е.: OVER DUP * +

Бр... а сам то потом не будеш путаться где как записанно.
Неее помне лучше "Форту фортово..." Но уменя вот такая идея недавно возникла

Код:
Formula{ (a+2-c)/2 }Formula \ Слово правда длинновато... идея вобщем :roll:

Formula{ Вычисляет инфиксное выражение и кладет значение на стек или компилирует
}Formula просто завершает это дело
Вобщем ты понял... :wink:

Вот а практически я столкнулся с тем что нужно все таки заголовочные файлы Си-шные транслировать.
И там как раз инфиксные выражения переодически попадаются.
Полноценный Си-шный парсер вобщем то не нужен а вот проверку на допустимость какую то надо иметь.

Автор:  mOleg [ Пт июл 09, 2010 17:01 ]
Заголовок сообщения:  Re: *преобразование скобочной записи в постфикс

_Harry писал(а):
Бр... а сам то потом не будеш путаться где как записанно.

Не буду, т.к. я пользуюсь постфиксом 8) Опять же, pp2.f - это иллюстрация идеи, как можно разбирать префиксную запись, целью которой было схематически показать, как можно сделать не только преобразование префиксной записи в постфиксную, а так же налету менять правила (достаточно подставить другой словарь в oplist ).
Сделать контроль ошибок можно.

_Harry писал(а):
Formula{ Вычисляет инфиксное выражение и кладет значение на стек или компилирует}Formula просто завершает это делоВобщем ты понял...

да это было сразу понятно, правда для этого придется подправить слово: expression

_Harry писал(а):
Вот а практически я столкнулся с тем что нужно все таки заголовочные файлы Си-шные транслировать.И там как раз инфиксные выражения переодически попадаются.

где-то я экспериментировал с разбором сишных хидеров, ээ, typedef.fts в набросках.

Автор:  _Harry [ Пт июл 09, 2010 18:45 ]
Заголовок сообщения:  Re: *преобразование скобочной записи в постфикс

mOleg писал(а):
где-то я экспериментировал с разбором сишных хидеров, ээ, typedef.fts в набросках.

Угу видел конечно но там не совсем то что мне нужно.
Мне не столько структуры нужны, сколько выражения типа #define (1233*2)+12
Ну и некоторые другие которые к Си-шному стандарту отношения не имеют но используются в компиляторе.
Вобщем все у нас получится :wink:

Автор:  mOleg [ Сб июл 10, 2010 15:39 ]
Заголовок сообщения:  Re: *преобразование скобочной записи в постфикс

_Harry писал(а):
Столкнулся с проблемой при попытке интерпретации полученой с помщью >postfix строки.Хотя выяснилось что дело не в >postfix-е а в буфере но пишу здесь.Вобщем так текст помещеный в буфер созданны с помощью memory/ buff.ftsпри попытке его интерпретации EVALUATE вызывает вылет без вывода сообщений.

проблема обнаружена и исправлена. См новую сборку.

Автор:  _Harry [ Пн июл 12, 2010 10:30 ]
Заголовок сообщения:  Re: *преобразование скобочной записи в постфикс

mOleg писал(а):
проблема обнаружена и исправлена. См новую сборку.

Ага теперь карашо т.е. гут!
А подскажи что с буфером получалось почему строка из него не EVALUAT-илась :wink:
интересно же :roll:

Страница 7 из 10 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/