Forth http://fforum.winglion.ru/ |
|
*преобразование скобочной записи в постфикс http://fforum.winglion.ru/viewtopic.php?f=19&t=1509 |
Страница 8 из 10 |
Автор: | mOleg [ Пн июл 12, 2010 14:52 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
_Harry писал(а): А подскажи что с буфером получалось почему строка из него не EVALUAT-илась это страшная история. дело в том, что подсунутая строка освобождалась с помощью FREE по окончании трансляции текста: с файловыми источниками так оно и должно быть, т.к. в форке если транслируемый файл влазит в память, то он туда копируется и дальше до окончания потока текст лежит в ней. Так вот, падало на FREE, которая пыталась освободить буфер (почему-то ошибки с хипом молча роняют систему, я пока не понял, почему). |
Автор: | _Harry [ Пн июл 12, 2010 17:51 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
Рановато я обрадовался. Еще какой то странный глюк обнаружился. Хотел сделать чтобы часть операторов просто вызывала ошибку. Ну например так: Код: \ ---------Это в конце списка операторов --------------- ; Теперь в консоли набираем: , ERROR" Ошибка!!!" Код: s" 1 , 2" >postfix TYPE получаем дергающуюся надпись что то про "неправильный дескриптор" . Т.е. она циклически выводится видимо и система висит. Если эта же строка в файле то ошибка обрабатывается. |
Автор: | mOleg [ Пн июл 12, 2010 19:20 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
_Harry писал(а): получаем дергающуюся надпись очень интересно! занимаюсь |
Автор: | _Harry [ Вт июл 13, 2010 17:45 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
mOleg писал(а): очень интересно! занимаюсь А вот это тоже интересно Код: s" -1" >postfix TYPE 1 - ok (0) s" 2 + -1" >postfix TYPE 2 + 1 - ok (0) Так то вот >postfix понимает отрицательные числа Чего то надо с этим делать |
Автор: | mOleg [ Вт июл 13, 2010 18:21 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
_Harry писал(а): А вот это тоже интересно Код:s" -1" >postfix TYPE1 - ok (0)s" 2 + -1" >postfix TYPE2 + 1 - ok (0)Так то вот >postfix понимает отрицательные числа гм, ну, тут достаточно понятно. На сколько помню, запись типа a+-б не встречается, а встречается a+(-б). За разбор лексем отвечает: : GetOp ( --> operand 0 | addr true ) separators xWord DUP IFNOT DDROP GetSep THEN ?operator ; кстати, для того, чтобы отловить подобную ситуацию, необходимо анализировать предыдущий символ, либо использовать другой символ, например: a+!b |
Автор: | mOleg [ Вт июл 13, 2010 20:50 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
_Harry писал(а): получаем дергающуюся надпись проблема локализована и исправлена, берем последнюю сборочку; |
Автор: | _Harry [ Вт июл 13, 2010 22:30 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
mOleg писал(а): На сколько помню, запись типа a+-б не встречается, а встречается a+(-б). Хм а как вам это покажется: #define NegConst -1500 вполне себе возможная ситуация. Другой так же вполне возможный вариант: #define ЧегоТоТам что_Ни_будь * -40 Скобки совсем не обязательны если отрицательное число отделено пробелом. mOleg писал(а): либо использовать другой символ, например: a+!b Это чисто теоретический вариант меня же интересует трансляция готовых файлов с определенным синтаксисом. А по сему mOleg писал(а): необходимо анализировать предыдущий символ Это в точку! Но я пока не придумал как. |
Автор: | вопрос [ Вт июл 13, 2010 22:48 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
Цитата: Это в точку! Но я пока не придумал как. Достаточно преобразовать файл, поделав пробелы перед минусами в случае сдвоенных операторов |
Автор: | _Harry [ Ср июл 14, 2010 00:47 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
вопрос писал(а): Достаточно преобразовать файл, поделав пробелы перед минусами в случае сдвоенных операторов Если бы все было так просто Пока что >postfix этого не понимает см. скриншоты выше |
Автор: | mOleg [ Ср июл 14, 2010 03:51 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
_Harry писал(а): mOleg писал(а):необходимо анализировать предыдущий символЭто в точку! Но я пока не придумал как. ну, тут достаточно все просто: CharAddr \ вернет адрес текущего символа (т.е. первого неразобранного) <C \ позволит сместиться на один символ назад (точнее получить его адрес) правда, нужно еще будет предусмотреть невыход за пределы буфера ввода. SOURCE \ возвращает адрес начала буфера и его длину |
Автор: | mOleg [ Ср июл 14, 2010 10:15 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
_Harry писал(а): Хм а как вам это покажется: #define NegConst -1500 вполне себе возможная ситуация. кстати, если подумать, то не так уж и серьезно оно, точнее, оно все интересно: s" -1500" >postfix TYPE выдаст 1500 - , что вобщем-то верно! то есть, если это самое 1500 - попадет в код, то результат будет в ряде случаев верен вобщем, по большому счету надо писать 2*(-3) и смотреть есть ли после скобки знак числа и само число! кстати, если: 3*(-a) , то уже не знак числа, а операция над 'a' будет, т.е. приходим таки к: '0 a -' или '!a'. Такие вот мысли |
Автор: | вопрос [ Ср июл 14, 2010 10:29 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
mOleg писал(а): _Harry писал(а): Хм а как вам это покажется: #define NegConst -1500 вполне себе возможная ситуация. кстати, если подумать, то не так уж и серьезно оно, точнее, оно все интересно: s" -1500" >postfix TYPE выдаст 1500 - , что вобщем-то верно! то есть, если это самое 1500 - попадет в код, то результат будет в ряде случаев верен вобщем, по большому счету надо писать 2*(-3) и смотреть есть ли после скобки знак числа и само число! кстати, если: 3*(-a) , то уже не знак числа, а операция над 'a' будет, т.е. приходим таки к: '0 a -' или '!a'. Такие вот мысли Вобще - это ровно одно ветвление - если операторы подряд, то пытаемся распознать число как отрицательное, если не распознаётся - ошибка ИМХО |
Автор: | _Harry [ Ср июл 14, 2010 11:10 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
вопрос писал(а): то есть, если это самое 1500 - попадет в код, то результат будет в ряде случаев верен И самое "хорошее" что в большинстве случаев неверен. вопрос писал(а): Вобще - это ровно одно ветвление - если операторы подряд, то пытаемся распознать число как отрицательное, если не распознаётся - ошибка Все было бы хорошо, если бы небыло так плохо. Вобщем вывод такой >postfix это только набросок, практически в готовом виде использовать нельзя. Потому как еще один недостаток виден операторы считаются разделителями а они в xWord.fts могут быть только односимвольными В реальных синтаксисах есть и многосимвольные операторы например: >> << => <= Т. е. начинать надо с этого, а ситуацию обработки знака числа отлавливать отдельно. Мне видится несколько способов, так что это не проблема. |
Автор: | вопрос [ Ср июл 14, 2010 11:18 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
Цитата: Все было бы хорошо, если бы небыло так плохо. тогда смотрим моё решение (оно самое первое) - может быть удастся его использовать - оно как-раз заготовка к реальной программе и работает при самых рапзных образцах строк (ошибки тоже распознаёт)Вобщем вывод такой >postfix это только набросок, практически в готовом виде использовать нельзя. Потому как еще один недостаток виден операторы считаются разделителями а они в xWord.fts могут быть только односимвольными В реальных синтаксисах есть и многосимвольные операторы например: >> << => <= Я вспомнил, что там есть проблемы и описание моё ... хм, несколько сложновато на самом деле задаём две строки - пользуемся а я на страницу... но при желании всё можно понять и файл, положенный на onlinedisk исчез, но там всё понятно |
Автор: | _Harry [ Пт июл 16, 2010 18:00 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
Так >postfix от mOleg-а переделал на многосимвольные операторы. Надо еще решить прамблему со знаком числа и тогда выложу, дабы каждый мог ногами попинать . Но сегодня от этой жары мозги отказываются работать напрочь. |
Страница 8 из 10 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |