Forth http://fforum.winglion.ru/ |
|
числа формат, преобразование, представление http://fforum.winglion.ru/viewtopic.php?f=36&t=2476 |
Страница 7 из 9 |
Автор: | вопрос [ Чт мар 04, 2010 22:29 ] |
Заголовок сообщения: | |
chess писал(а): На компилятор должна быть документация - ее не заменят никакие учебники.
С другой стороны никакая документация не заменит учебника, это, надеюсь, не нужно аргументирвать. И главное - по факту она есть? Как например, разобраться в работе ассемблера СПФ или даже просто в том, как СПФ реализован? даже файл chm обновляется крайне нечасто, кажется - вообще не обновляется. Постоянное чтение исходников (причём, как СПФ-овских так и майкрософтовских справочников) - не лучшее расходование времени |
Автор: | _Harry [ Пт мар 05, 2010 02:50 ] |
Заголовок сообщения: | |
chess писал(а): В вашем случае лучше задать числа в HEX без суффиксов (по умолчанию у HEX-формы не будет суффиксов). Текст будет даже короче чем был с глобальным BASE. Это сейчас о чем уже Если предположить что нету BASE, какие умолчания, все надо явно указывать или как? chess писал(а): BASE не так страшен как излишен.
Я бы сказал не столько излишен сколько полезен. Может напишет все таки код INTERPRET-а кто ни будь, для работы без BASE или его тоже побоку. А чего ломать так уж все глобально |
Автор: | mOleg [ Пт мар 05, 2010 06:49 ] |
Заголовок сообщения: | |
_Harry писал(а): Это сейчас о чем уже Если предположить что нету BASE, какие умолчания, все надо явно указывать или как? я вообще не пойму из-за чего весь сыр-бор. для совместимости оставить BASE можно, но при этом вынести ее из базовых слов ядра транслятора. следующая часть остается обязательной: <pre> : >number ( ud asc # base --> ud asc # ) ... ; </pre> и по умолчанию система считает все числа десятичными, а префиксы оставляем для остальных типов чисел. а следующее выносим на уровень совместимости: <pre> VARIABLE BASE : >NUMBER ( ud1 asc # --> ud2 asc # ) BASE @ >number ; </pre> то же самое делается и с форматным преобразованием: <pre> : {# ( base --> ) .... ; </pre> а в совместимость пойдет: <pre> : <# ( --> ) BASE @ {# ; </pre> причем, имхо, стоит постараться уйти от фиксирования разрядности чисел. _Harry писал(а): Может напишет все таки код INTERPRET-а кто ни будь, для работы без BASE или его тоже побоку.
<pre> \ попытаться распознать строку, как число : ?NUMBER ( asc # --> ) 0x0A >number IF S" Неверное имя или число!" SERROR THEN LITERAL ; \ тут предполагается что разрядность чисел будет сбалансирована LITERAL-ом \ интерпретация одного токена (идентификатора) : EvalToken QUEST \ xt imm flg | asc # false IF IF EXECUTE \ immediate слова всегда исполняются ELSE REGULAR THEN ELSE ?NUMBER THEN ; \ трансляция входного потока : INTERPRET BEGIN NextToken DUP WHILE EvalToken ?STACK REPEAT DROP DROP ; </pre> |
Автор: | Hishnik [ Пт мар 05, 2010 10:40 ] |
Заголовок сообщения: | |
mOleg писал(а): следующая часть остается обязательной:
: >number ( ud asc # base --> ud asc # ) ... ; Обязательным должен быть NUMBER. Даже <# - уже неоднозначно, NUMBER вполне может быть примитивом. |
Автор: | idem [ Пт мар 05, 2010 11:16 ] |
Заголовок сообщения: | |
Хищник писал(а): А тут не демократия. Тут "по предъявлению". Есть программа - это аргумент. Есть мнение - оно может считаться, а может и не считаться аргументом. Поскольку одну точку зрения высказали сплошь практикующие программисты, а другую - сплошь те, кто заявляет, что Форт у них хобби, что надо думать? Я вот и подумал, что исключение BASE - забавная игра ума, плохо применимая к реальности.
Я из «непрактикующих», поэтому, извиняюсь за, возможно, не аргументированное вмешательство в тему. Рассматривая стандарт, как последовательность «непротиворечивой» раскрутки Форт-системы с нуля можно разделить проблему на два вопроса. На какой стадии раскрутки подключать BASE? Делать BASE глобальной или локальной? По-второму вопросу, как мне кажется, надо предусмотреть оба варианта. Так делают в большинстве(навскидку) языков. А по-первому вопросу ясности нету. Учитывая, что исполняемый com-файл можно создать без компилятора, а в нем используется 16-тиричная система, значит она должна быть дефолтовой? Про МК тоже ясности нету. Где-то, возможно, набивают «010011011». |
Автор: | _Harry [ Пт мар 05, 2010 11:38 ] |
Заголовок сообщения: | |
Цитата: _Harry писал(а):
Может напишет все таки код INTERPRET-а кто ни будь, для работы без BASE или его тоже побоку. \ попытаться распознать строку, как число Код: : ?NUMBER ( asc # --> ) 0x0A >number IF S" Неверное имя или число!" SERROR THEN LITERAL ; \ тут предполагается что разрядность чисел будет сбалансирована LITERAL-ом \ интерпретация одного токена (идентификатора) : EvalToken QUEST \ xt imm flg | asc # false IF IF EXECUTE \ immediate слова всегда исполняются ELSE REGULAR THEN ELSE ?NUMBER THEN ; \ трансляция входного потока : INTERPRET BEGIN NextToken DUP WHILE EvalToken ?STACK REPEAT DROP DROP ; Ну и что мы имеем, если у меня файл ( полученый из вне с числами в хекс формате ). Я должен либо дописать к ним префиксы, либо как то по изворачиваться, но просто транслировать его уже не получится. Мне не нравится ( как говорил слоненок " ...Извините" ) Неудобно так работать! |
Автор: | Hishnik [ Пт мар 05, 2010 11:49 ] |
Заголовок сообщения: | |
idem писал(а): Я из «непрактикующих», поэтому, извиняюсь за, возможно, не аргументированное вмешательство в тему. Рассматривая стандарт, как последовательность «непротиворечивой» раскрутки Форт-системы с нуля можно разделить проблему на два вопроса. На какой стадии раскрутки подключать BASE? Делать BASE глобальной или локальной? По-второму вопросу, как мне кажется, надо предусмотреть оба варианта. Так делают в большинстве(навскидку) языков. А по-первому вопросу ясности нету. Насчет "большинства языков" я несколько не понял. В каждом языке существуют требования к представлению чисел, которые в целом тяготеют к общепринятым математическим стандартам. Система счисления по умолчанию десятичная, остальные системы определяются форматными спецификаторами. Почему в Форте BASE? Потому что это напрашивается при рассмотрении алгоритма преобразования строки в число. 123 -> 1 -> 2 -> 1*10+2 = 12 3 -> 12*10 + 3 = 123 Нетрудно заметить, что вместо 10 можно поставить любое основание системы счисления, и будет прекрасно работать. Заменяем константу на переменную, и все дела. Глобальная или локальная она будет - вопрос к программисту. Другое дело, что на момент начала преобразования числа она должна быть известна и определена. А также быть доступной к изменению. idem писал(а): Учитывая, что исполняемый com-файл можно создать без компилятора, а в нем используется 16-тиричная система, значит она должна быть дефолтовой? Про МК тоже ясности нету. Где-то, возможно, набивают «010011011».
Нет, в файлах никакие системы не используются. Десятичная, шестнадцатиричная, двоичная и прочие системы счисления имеют какое-то значение лишь при вводе и отображении чисел. Компьютер физически работает только в двоичной системе, причем это не символы 0 и 1 (с кодами 48 и 49 соответственно), а уровни напряжения. Просто байт удобно представлять двумя шестнадцатиричными символами, поэтому при работе на низком уровне, а также с электроникой эта система счисления удобна и показательна. Отсюда и пожелание иметь возможность использовать ее в качестве "временной системы по умолчанию", чтобы не писать ни 0x, ни h, ни $ или еще какой-то символ. |
Автор: | idem [ Пт мар 05, 2010 13:19 ] |
Заголовок сообщения: | |
Хищник писал(а): Насчет "большинства языков" я несколько не понял… Да уж… извиняюсь за свои неслишком корректные утверждения. Не буду создавать оффтопик из объяснений. Однако, исходя из того, что мне кажется возможным реализовать Форт-систему с нуля, не выделяя при этом ФВМ, замечу, что необходимость с самого начала использования BASE под большим сомнением. Обсуждение идет сугубо о языке с достаточно устоявшимся(стандартным) синтаксисом, поэтому, при попытках применить восходящий стиль разработки надо перепрыгивать через некоторые пробелы, что не будет упрощением. Думаю, что решением может быть создание минимального Форт-транслятора. Тогда многие вопросы отпадут сами, в том числе и данной темы.
|
Автор: | Hishnik [ Пт мар 05, 2010 13:35 ] |
Заголовок сообщения: | |
idem писал(а): Однако, исходя из того, что мне кажется возможным реализовать Форт-систему с нуля, не выделяя при этом ФВМ, замечу, что необходимость с самого начала использования BASE под большим сомнением. Обсуждение идет сугубо о языке с достаточно устоявшимся(стандартным) синтаксисом, Именно из-за устоявшегося синтаксиса и простоты решения с BASE оно уже "въелось". idem писал(а): Думаю, что решением может быть создание минимального Форт-транслятора. Тогда многие вопросы отпадут сами, в том числе и данной темы.
Вот это точно. Тогда и не будет раздутых обсуждений второстепенных проблем. |
Автор: | mOleg [ Пт мар 05, 2010 15:06 ] |
Заголовок сообщения: | |
Хищник писал(а): Обязательным должен быть NUMBER. такого слова нет, есть >NUMBER либо устаревший (согласно ANSI X3.215-1994) CONVERT . Хищник писал(а): Даже <# - уже неоднозначно не понял, поясни пожалуйста Хищник писал(а): NUMBER вполне может быть примитивом может, но не слишком удобно, лучше делать примитивом слово в явном виде (а не косвенно, как сейчас) получающее систему счисления. idem писал(а): Рассматривая стандарт, как последовательность «непротиворечивой» раскрутки Форт-системы с нуля можно разделить проблему на два вопроса. На какой стадии раскрутки подключать BASE? вобщем, о том и речь. BASE не мешает в большой системе, хотя, к сожалению BASE плохо совмещается с CATCH THROW механизмом. idem писал(а): Делать BASE глобальной или локальной? привычнее глобальная из-за этого и ломаются копья, стулья и прочая _Harry писал(а): Ну и что мы имеем, если у меня файл ( полученый из вне с числами в хекс формате ).
Я должен либо дописать к ним префиксы, либо как то по изворачиваться, но просто транслировать его уже не получится. ох, ну сказал же, зависит от конкретного ээ использования этих чисел. То есть, что с ними вы дальше собираетесь делать и определяет как лучше поступить. Кстати, префиксы не самый интересный вариант! Можно писать и так d: 123456 h: E3D8 и т.д. Кстати, вариант интересен тем, что для его реализации не нужны ни BASE ни NUMBER внутри транслятора, а сами d: h: и им подобные могут быть определены уже в работающем Форте. т.е. интерпретатор станет еще проще: <pre> : EvalToken QUEST \ xt imm flg | asc # false IF IF EXECUTE \ immediate слова всегда исполняются ELSE REGULAR THEN ELSE ERROR" Лексема не опознана!" THEN ; </pre> |
Автор: | mOleg [ Пт мар 05, 2010 15:08 ] |
Заголовок сообщения: | |
Хищник писал(а): Вот это точно. Тогда и не будет раздутых обсуждений второстепенных проблем.
я для интереса посмотрел в начало обсуждения, чтобы увидеть, кто же раздул вопрос о BASE до невероятных размеров |
Автор: | Hishnik [ Пт мар 05, 2010 17:21 ] |
Заголовок сообщения: | |
mOleg писал(а): Хищник писал(а): Обязательным должен быть NUMBER. такого слова нет, есть >NUMBER либо устаревший (согласно ANSI X3.215-1994) CONVERT . А куда ж оно делось-то? mOleg писал(а): Хищник писал(а): Даже <# - уже неоднозначно не понял, поясни пожалуйста А вот этого как раз нет, потому что печать тоже может быть примитивом, а при реализации на ЯВУ - так и функцией этого ЯВУ. Какие <# # #> ? mOleg писал(а): может, но не слишком удобно, лучше делать примитивом слово в явном виде (а не косвенно, как сейчас) получающее систему счисления. mOleg писал(а): вобщем, о том и речь. BASE не мешает в большой системе, хотя, к сожалению BASE плохо совмещается с CATCH THROW механизмом. Ни комментариев, ни аргументов.... ни кода. mOleg писал(а): _Harry писал(а): Ну и что мы имеем, если у меня файл ( полученый из вне с числами в хекс формате ). mOleg писал(а): ох, ну сказал же, зависит от конкретного ээ использования этих чисел. То есть, что с ними вы дальше собираетесь делать и определяет как лучше поступить. Кстати, префиксы не самый интересный вариант! Можно писать и так d: 123456 h: E3D8 и т.д. Кстати, вариант интересен тем, что для его реализации не нужны ни BASE ни NUMBER внутри транслятора, а сами d: h: и им подобные могут быть определены уже в работающем Форте. т.е. интерпретатор станет еще проще: Вот человек же написал черным по белому "полученный извне". Какие префиксы? Какое вообще редактирование этого файла? И не в первый раз уже написано. Но нет, если реальные задачи противоречат красивой теории, тем хуже для реальных задач!... mOleg писал(а): я для интереса посмотрел в начало обсуждения, чтобы увидеть, кто же раздул вопрос о BASE до невероятных размеров
Да я, я! Кто ж тут еще штатный виноватый в неудачах блестящих проектов? |
Автор: | _Harry [ Пт мар 05, 2010 17:41 ] |
Заголовок сообщения: | |
Хищник писал(а): полученный извне". Какие префиксы? Какое вообще редактирование этого файла?
Да ... трудно бывает достучаться Представте себе в этом файле имеется 200 чисел которым надо явно указать систему счисления. И все это вместо Код: HEX ......
....................... ...........................\ много всяких чисел ;) ............. DECIMAL |
Автор: | mOleg [ Пт мар 05, 2010 17:48 ] |
Заголовок сообщения: | |
_Harry писал(а): Да ... трудно бывает достучаться да нет, твой довод понят, только предлагаемая тобой ситуация не полна. _Harry писал(а): Представте себе в этом файле имеется 200 чисел которым надо явно указать систему счисления.
вопрос в том, что дальше ты с этими числами будешь делать? просто положить на стек их не везде получится (стек может позволять 10 чисел хранить). То есть сразу возникает вопрос что ты будешь с этими числами делать, и он определяет как их распознавать. |
Автор: | вопрос [ Пт мар 05, 2010 18:08 ] |
Заголовок сообщения: | |
Н-ну и ну... Если способ представления не то, чтобы чисел, а только основания системы счисления требует такого долгого обсуждения ... это, правда, нормально, но только при условии, что не безрезультатно. В новом стандарте есть глава "совместимость"? |
Страница 7 из 9 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |