Forth http://fforum.winglion.ru/ |
|
*преобразование скобочной записи в постфикс http://fforum.winglion.ru/viewtopic.php?f=19&t=1509 |
Страница 10 из 10 |
Автор: | mOleg [ Пт июл 23, 2010 14:30 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
_Harry писал(а): mOleg Опять какие то косяки с EVALUATE там и в примере косяки с макросами надо очень внимательным быть должно быть так: transl/ evaluate.fts однако, ошибки я ловил, когда при закрытии текушего потока есть незавершонное поределение, а так, как evaluate работает с отдельным потоком, оно и вылезло, править sources.f \ транслировать указанный источник с помощью слова представленного своим xt * EvalSrcWith повторная правка |
Автор: | _Harry [ Пт июл 23, 2010 14:46 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
вопрос писал(а): решение, учитывающее синтаксис языка весь Это что транслятор с Си на Форт Бр........... спасибо не надо. true-grue писал(а): Очевидно, cinf от Михаила Максимова Дык кому надо пусть пользуется. А меня этот мой постфикс вполне устраивает и именно как раз своей неуниверсальностью. А собственно чем он неуниверсален ведь изменить набор слов операторов и список операторов используемый при разборе всегда можно ( кстати это неплохо бы вынести в отдельный файл ) сама то логика преобразования правильная. |
Автор: | _Harry [ Пт июл 23, 2010 14:47 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
mOleg писал(а): source-id @ -2 <> Угу я уже и сам туда добрался |
Автор: | _Harry [ Пт июл 23, 2010 14:59 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
mOleg писал(а): должно быть так: transl/ evaluate.fts : ti1 s" 1 2 +" EVALUATE ; IMMEDIATE : t2 ti1 3 + ; ti1 положит на стек во время компиляции 3. И зачем мне это Код: : ti1 s" 1 2 +" EVALUATE [COMPILE] LITERAL ; IMMEDIATE \ что тут неправильно?
\ Это слово должно скомпилировать результат работы EVALUATE |
Автор: | mOleg [ Пт июл 23, 2010 15:04 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
Цитата: \ s" " S: ; \ пробелы просто пропускаются \ Нет пробелы не считаются операторами а зря, мне это нравится |
Автор: | mOleg [ Пт июл 23, 2010 15:08 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
_Harry писал(а): ti1 положит на стек во время компиляции 3. И зачем мне это не верно! как раз ti1 исполняет EVALUATE в режиме компиляции, а это значит, что в код скомпилируется: lit(1) lit(2) + _Harry писал(а): : ti1 s" 1 2 +" EVALUATE [COMPILE] LITERAL ; IMMEDIATE \ что тут неправильно?\ Это слово должно скомпилировать результат работы EVALUATE то есть, в коде будет: lit(1) lit(2) + lit(??) поэтому, литерал выдаст ошибку исчерпание стека, если, конечно, на стеке у тя чего нить не болтается случайно завалявшегося. Ж;) |
Автор: | вопрос [ Пт июл 23, 2010 15:17 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
Цитата: Это что транслятор с Си на Форт Бр........... спасибо не надо. нет , только для строки с действиями |
Автор: | _Harry [ Пт июл 23, 2010 15:41 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
вопрос писал(а): нет , только для строки с действиями Ну на вскидку Код: A++ Как компилироватьИли Код: A+=5 A - может быть байтом, словом, двойным, словом и т.д. Типы учитывать надо, структуры, перечесления, - мало? Ладно дальше юниты, адреса, элементы масива .... думаю достаточно. Вобщем само нужное, ну для меня конечно, это подключение заголовочных файлов это сделать вполне реально, а остальной код уж увольте я за такое браться не хочу. |
Автор: | _Harry [ Пт июл 23, 2010 15:46 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
mOleg писал(а): поэтому, литерал выдаст ошибку исчерпание стека, если, конечно, на стеке у тя чего нить не болтается случайно завалявшегося. Как это EVALUATE Выполнится во время компиляции и положит на стек 3 , LITERAL тоже выполнится скомпилирует число в слово и что не так? |
Автор: | mOleg [ Пт июл 23, 2010 15:52 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
_Harry писал(а): Как это EVALUATE Выполнится во время компиляции и положит на стек 3 EVALUATE не вычисляет выражение, а "вклинивает" трансляцию текста внутрь текущего потока. Короче, это как просто вставить в код t2 вместо ti1 выражение: 1 2 + то есть равносильно : t2 1 2 + 3 - ; соответственно в коде так и будет: lit(1) lit(2) + lit(3) - exit |
Автор: | mOleg [ Пт июл 23, 2010 15:54 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
_Harry писал(а): LITERAL тоже выполнится скомпилирует число в слово и что не так? не так то, что LITERAL скомпилирует какое-то неизвестное число за 1, 2 и операцией сложения если же тебе необходимо, чтобы EVALUATE вычислил значение строки, надо временно переключить state в режим трансляции, а потом, после трансляции строки, вернуть его обратно, тогда можно использовать и LITERAL, точнее, смотри слово literal в literals.f |
Автор: | _Harry [ Пт июл 23, 2010 16:31 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
mOleg писал(а): там и в примере косяки с макросами надо очень внимательным быть Точно ступил Самое интересное что чтобы обойти ошибку в EVALUATE я как раз mOleg писал(а): надо временно переключить state в режим трансляции, а потом, после трансляции строки, вернуть его обратно, Это и делал таким образом свою ошибку и пропустил во как
|
Автор: | _Harry [ Пт июл 23, 2010 16:37 ] |
Заголовок сообщения: | Re: *преобразование скобочной записи в постфикс |
mOleg писал(а): Цитата: \ s" " S: ; \ пробелы просто пропускаются \ Нет пробелы не считаются операторами а зря, мне это нравится Собственно и мне сначало понравилось только это мешает правильно разбираться со знаками Да и нелогично это, пробел все же не является оператором покрайней мере в Си подобных языках. |
Страница 10 из 10 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |