Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт окт 17, 2017 19:01

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 173 ]  На страницу Пред.  1 ... 8, 9, 10, 11, 12
Автор Сообщение
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Пт дек 19, 2014 18:13 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 480
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
gudleifr писал(а):
Вводить игнорируемый комментарий с консоли? Да Вы, батенька, извращенец. А из файла все прекрасно читается и без исключений.
По моему извращение не иметь возможности распечатывать текстовые файлы на консоль. Не руками же их все время набирать.
Связь со встроенной системой от ПК по UART, то есть через консоль. Встроенная система собственного доступа к файлам на ПК не имеет. Иногда работаешь с этой системой пальчиками через клавиатуру, а иногда копируешь готовые текстовые файлы на консоль и они улетают встроенной системе, точно также, как если бы ты их набрал с клавиатуры. При этом в файлах встречаются многострочные комментарии и система их игнорирует.

P.S. Во встроенной системе ОС нет.


Последний раз редактировалось Ethereal Пт дек 19, 2014 18:56, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Пт дек 19, 2014 18:17 
Не в сети
Аватара пользователя

Зарегистрирован: Чт дек 31, 2009 18:36
Сообщения: 1961
Откуда: Питер
Благодарил (а): 13 раз.
Поблагодарили: 32 раз.
Ethereal писал(а):
При этом в файлах встречаются многострочные комментарии и система их игнорирует.
Для этого не нужно никаких исключений.

Мы с Вам опять вернулись к началу: от "никакой операционной системы" - к обработке исключений, буферизации и прочим полезным мелочам, которые ее и составляют.

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Пт дек 19, 2014 18:34 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 480
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
gudleifr писал(а):
Для этого не нужно никаких исключений.
Вам бы еще талант изъясняться понятно. Про какие исключения в этой фразе идет речь ? Вы про это что-ли ?
\ Исключительная ситуация возникает, если длина извлеченной строки
\ больше максимальной длины строки со счетчиком.

Так это тупая цитата из стандарта ANSI-Forth. Тут имеется ввиду не столько исключительная ситуация, сколько неверный результат. В моей реализации длина строки, извлекаемой по WORD, всегда усекается до максимум 31-го символа. Никакого исключения при этом не происходит.
gudleifr писал(а):
Мы с Вам опять вернулись к началу: от "никакой операционной системы" - к обработке исключений, буферизации и прочим полезным мелочам, которые ее и составляют.
Форт сам обрабатывает свои исключения, выкидываемые словом THROW, и сам входную строку буферизирует. ОС тут даже и работы не найдется.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Пт дек 19, 2014 19:20 
Не в сети
Аватара пользователя

Зарегистрирован: Чт дек 31, 2009 18:36
Сообщения: 1961
Откуда: Питер
Благодарил (а): 13 раз.
Поблагодарили: 32 раз.
Ethereal писал(а):
Вам бы еще талант изъясняться понятно.

Что есть...

Попробую по-порядку: в DOS-версиях FOBOS я тупо вводил с консоли по INT 21(0A), понятно, если комментарий не успевал закончиться до конца строки, это было его проблемой (но кто будет вводить с консоли комментарии?). В качестве "дисковой памяти" использовал блоки, очевидно, т.к. блок читался в память целиком, проблемы "конца строки" у него не было.

В Win-версии я считываю в память весь файл целиком - т.к. он играет роль исключительно загрузочную. А в Win-приложениях ввод идет через органы управления - там свои прибабахи. Т.е. опять, концы строк - это обычные пробелы.

Теперь посмотрим общий случай: EXPECT читает порциями.

Баранов и Ноздрунов:
Код:
  : INTERPRET ( ->) BEGIN ... WORD ... FIND ... EXECUTE ... AGAIN ;
  : ФОРТ-СИСТЕМА ( ->) BEGIN QUERY INTERPRET AGAIN ;

Т.е. упершись в конец TIB, WORD честно возвращает слово "имя нулевой длины" (которое представляет собой тот же EXIT) и его честно EXECUTE, т.е. работа бесконечного цикла INTERPET прекращается и запускается следующая итерация ФОРТ-СИСТЕМА.
Понятно, такое сожрет комментарий только если он влезает целиком.

У Вас имеем:
Код:
: ( [CHAR] ) PARSE + TIB >IN @ + =
    WHILE REFILL 0= UNTIL THEN ; IMMEDIATE

Т.е. какая-то хрень: сначала мы запускает WORD, которому пофигу наши "заполнители TIB", а затем сами его заполняем (REFILL). Если мы так делаем при каждом использовании WORD, то этот REFILL проще туда (в WORD) и засунуть, ведь проверка конца TIB там уже есть. (Т.о. WORD будет выдавать "нулевое слово" только после полного конца ввода). Не будет очевидной реакции на Enter? Это вопрос драйвера клавиатуры. При чтении из файла - пофиг.
Ethereal писал(а):
Так это тупая цитата из стандарта ANSI-Forth.
Выкинуть! Само понятие "структурной обработки исключительных ситуаций" - бяка.
Ethereal писал(а):
ОС тут даже и работы не найдется.
То, что ее делает FORTH, не значит, что ее нет. Он она в большой степени и есть.

P.S. Кстати, то, что Вы употребляете слово "файл" свидетельствует о том, что ОС присутствует и не только в виде FORTH-огрызка. Просто она стоит на другом конце Вашей двухмашинной связки, в которй "младший брат" не является вполне самостоятельным.

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


Последний раз редактировалось gudleifr Пт дек 19, 2014 19:27, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 20, 2014 11:14 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 480
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
gudleifr писал(а):
Попробую по-порядку: в DOS-версиях FOBOS я тупо вводил с консоли по INT 21(0A), понятно, если комментарий не успевал закончиться до конца строки, это было его проблемой (но кто будет вводить с консоли комментарии?). В качестве "дисковой памяти" использовал блоки, очевидно, т.к. блок читался в память целиком, проблемы "конца строки" у него не было.

В Win-версии я считываю в память весь файл целиком - т.к. он играет роль исключительно загрузочную. А в Win-приложениях ввод идет через органы управления - там свои прибабахи. Т.е. опять, концы строк - это обычные пробелы.

Это вопрос исповедуемой идеологии. У вас клавиатура - это одно, а файл это другое.
Я же исповедую идеологию, взятую от RT-11 и от Unix, кстати и под MS-DOS она
есть, только несколько в убогом виде. Есть понятие поток - stream.
Форт принимает поток, который называется "стандартный ввод".
А откуда я этот поток физически запущу - с клавиатуры или
из файла - это мое дело. Форт одно от другого не различит.
Грубо говоря, если я под MS-DOS запушу Форт так
forth.exe
то он будет принимать с клавиатуры.
Если так
forth.exe < source.txt
то из файла, поскольку я переназначит стандартный ввод на файл.

Если Вы пользовались INT 21(0A) , то с чего вы решили, что это был
обязательно ввод с консоли ? Это поток "стандартного ввода" и этот
стандартный ввод может идти не только с клавиатуры, но и из файла и
из другого устройства. Если Вашу систему запустить с переназначением
ввода
forth.exe < source.txt
, то ввод пойдет из файла source.txt , а в нем вполне естественны комментарии.
gudleifr писал(а):
P.S. Кстати, то, что Вы употребляете слово "файл" свидетельствует о том, что ОС присутствует и не только в виде FORTH-огрызка. Просто она стоит на другом конце Вашей двухмашинной связки, в которй "младший брат" не является вполне самостоятельным.

Младший брат не вполне самостоятелен только в процессе сборки
приложения и его отладки. После того как приложение собрано старший брат
в виде ПК от младшего брата отключается и младший брат работает совершенно
самостоятельно.
При таком подходе достигаются следующие преимущества.
1.) Мне не надо реализовывать никаких блоков или файловой системы на
младшем брате. Только посимвольный ввод и вывод через UART
2.) Я при сборке приложения пользуюсь всеми благами ОС и редактирую исходники
в виде файлов на ПК. Подключившись терминальной программой к младшему брату
или с клаваитуры им управляю, или скармливаю ему текстовые файлы с ПК, просто
переназначая входной поток на файл.
3.) Все, что на младшем брате не нужно после сборки приложения (ОС, шмос), так его там и нет. Все (почти) лишнее после сборки приложения отключается/отсекается. ОС, использовавшаяся до этого, отключается простым отключением кабеля от ПК. Словарь тоже отсекается. Он или в отдельной микросхемке ведется 24c256, тогда когда приложение собрано, микросхемка вынимается из колодки и все, словаря нет, или в хвосте EEPROM и тогда после сборки напоследок этот кусок памяти затирается.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 20, 2014 11:41 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 480
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
>Выкинуть! Само понятие "структурной обработки исключительных ситуаций" - бяка.
Выкинуто. Точнее данное положение стандарта переистолковано по другому.

gudleifr писал(а):
У Вас имеем:
Код:
: ( [CHAR] ) PARSE + TIB >IN @ + =
    WHILE REFILL 0= UNTIL THEN ; IMMEDIATE

Т.е. какая-то хрень: сначала мы запускает WORD, которому пофигу наши "заполнители TIB", а затем сами его заполняем (REFILL).

Нет тут никакой хрени. Если [CHAR] ) PARSE вернула строку, которая
распространяется до конца входного буфера, то она вообще символа )
не нашла (в противном случае строка хотя бы на сам символ ) до конца
буфера не дотягивалась бы). Не нашла. А раз не нашла, то принимаем
еще строку по REFILL и продолжаем искать (ить от многострочных комментариев
отказываться то не хотим, а значит если начался комментарий по (
, то нужно жевать строки пока не встретим ")" ).

А REFILL - это то-же самое, что QUERY TRUE
Код:
: REFILL                                                \ CORE EXT
  SOURCE-ID IF FALSE EXIT THEN QUERY TRUE
;

Введено только для реализации стандарта ANSI-Forth во всей полноте.
Точнее, чтобы Форт-система забыла про многострочные комментарии при EVALUATE ибо
: EVALUATE TRUE TO SOURCE-ID ... FALSE TO SOURCE-ID ;

А QUERY - это прием новой строки во входной буфер вплоть до появления CR/LF.
: QUERY TIB C/L ACCEPT #TIB ! >IN 0! ;
Ну и до кучи :
Код:
// : ACCEPT ( c-addr +n1 -- +n2 )
//   OVER + OVER
//   BEGIN
//      KEY DUP >R
//      CASE
//        8 OF
//            2 PICK OVER <> IF R@ EMIT SPACE R@ EMIT 1- THEN
//          ENDOF
//        13 OF
//             RDROP CR NIP SWAP - EXIT
//           ENDOF
//        DUP BL U< INVERT
//        IF
//          2DUP <> IF R@ EMIT R@ OVER C! CHAR+ THEN
//        THEN
//      ENDCASE
//      RDROP
//   AGAIN
// ;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 20, 2014 13:35 
Не в сети
Аватара пользователя

Зарегистрирован: Чт дек 31, 2009 18:36
Сообщения: 1961
Откуда: Питер
Благодарил (а): 13 раз.
Поблагодарили: 32 раз.
Ethereal писал(а):
forth.exe < source.txt
Это обеспечивает ОС. Можно сколько угодно говорить о ее отсутствии, это только вопрос терминологии.

Ethereal писал(а):
Если [CHAR] ) PARSE вернула строку, которая
распространяется до конца входного буфера, то она вообще символа )
не нашла (в противном случае строка хотя бы на сам символ ) до конца
буфера не дотягивалась бы). Не нашла. А раз не нашла, то принимаем
еще строку по REFILL и продолжаем искать (ить от многострочных комментариев
отказываться то не хотим, а значит если начался комментарий по (
, то нужно жевать строки пока не встретим ")" ).
Об этом я и говорил.
Но,
1) Факт "не нашла" становится известен уже в WORD.
2) Подобный REFILL, очевидно, понадобится во всех подобных (использующих WORD) словах.
Поэтому я и предложил засунуть вызов REFILL в WORD.

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 27, 2014 14:39 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4830
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
ArtemKAD писал(а):
Появилось тут желание для нужд целевой компиляции вместо использования Форт-асма использовать ассемблер стороннего поизводителя.

ну, как, дело-то продвинулось?

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 173 ]  На страницу Пред.  1 ... 8, 9, 10, 11, 12

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB