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 Еще одна неприятная особенность (или особенная неприятность )>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 ( --> ) а именно в ;CREATE , которое завершает создание текущего определения, после чего HERE становится недействителен. Я боролся с определениями в конце файлового потока, и просмотрел возможность использование ExitSource для трансляции строки внутри определения. Подумаю, как исправить. и тут сразу понятно, почему второй пример ошибки не вызывает, ведь строка разбирается до начала содания определения |
Автор: | mOleg [ Чт июл 08, 2010 19:44 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
вобщем, самый простой способ, закоментировать строку с ;CREATE и пересобрать систему. Возможно с буфером такая же проблема была, однако, с последним разбираться буду на выходных. |
Автор: | _Harry [ Чт июл 08, 2010 22:57 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
mOleg писал(а): неа, зачем? мне и так нравится Хм ну если это рассматривать только как конкурсную задачку то да. А я то с прицелом на практическое использование... И такие вольности будут настоящей миной замедленного действия. Ну да ладно все равно доработать много чего придётся. Вот что за проблема с буфером и чем строка из 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 писал(а): достаточно закоментировать одну строчку: Ну и еще кое что закоментировать придется. Это как раз не проблема, а вот надо какие то проверки на корректность добалять. Например выражение s" a+=b" будет обработано связкой >postfix EVALUATE не по Си-шным правилам. Хотя в моем случае появление такого выражения и подобных ему должно вызывать ошибку. mOleg писал(а): я же сказал, разберусь А никто и не сомневался |
Автор: | 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 просто завершает это дело Вобщем ты понял... Вот а практически я столкнулся с тем что нужно все таки заголовочные файлы Си-шные транслировать. И там как раз инфиксные выражения переодически попадаются. Полноценный Си-шный парсер вобщем то не нужен а вот проверку на допустимость какую то надо иметь. |
Автор: | mOleg [ Пт июл 09, 2010 17:01 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
_Harry писал(а): Бр... а сам то потом не будеш путаться где как записанно. Не буду, т.к. я пользуюсь постфиксом Опять же, pp2.f - это иллюстрация идеи, как можно разбирать префиксную запись, целью которой было схематически показать, как можно сделать не только преобразование префиксной записи в постфиксную, а так же налету менять правила (достаточно подставить другой словарь в oplist ). Сделать контроль ошибок можно. _Harry писал(а): Formula{ Вычисляет инфиксное выражение и кладет значение на стек или компилирует}Formula просто завершает это делоВобщем ты понял... да это было сразу понятно, правда для этого придется подправить слово: expression _Harry писал(а): Вот а практически я столкнулся с тем что нужно все таки заголовочные файлы Си-шные транслировать.И там как раз инфиксные выражения переодически попадаются. где-то я экспериментировал с разбором сишных хидеров, ээ, typedef.fts в набросках. |
Автор: | _Harry [ Пт июл 09, 2010 18:45 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
mOleg писал(а): где-то я экспериментировал с разбором сишных хидеров, ээ, typedef.fts в набросках. Угу видел конечно но там не совсем то что мне нужно. Мне не столько структуры нужны, сколько выражения типа #define (1233*2)+12 Ну и некоторые другие которые к Си-шному стандарту отношения не имеют но используются в компиляторе. Вобщем все у нас получится |
Автор: | mOleg [ Сб июл 10, 2010 15:39 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
_Harry писал(а): Столкнулся с проблемой при попытке интерпретации полученой с помщью >postfix строки.Хотя выяснилось что дело не в >postfix-е а в буфере но пишу здесь.Вобщем так текст помещеный в буфер созданны с помощью memory/ buff.ftsпри попытке его интерпретации EVALUATE вызывает вылет без вывода сообщений. проблема обнаружена и исправлена. См новую сборку. |
Автор: | _Harry [ Пн июл 12, 2010 10:30 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
mOleg писал(а): проблема обнаружена и исправлена. См новую сборку. Ага теперь карашо т.е. гут! А подскажи что с буфером получалось почему строка из него не EVALUAT-илась интересно же |
Страница 7 из 10 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |