Forth
http://fforum.winglion.ru/

Quark: build 25
http://fforum.winglion.ru/viewtopic.php?f=23&t=2556
Страница 1 из 3

Автор:  Hishnik [ Вс мар 28, 2010 02:19 ]
Заголовок сообщения:  Quark: build 25

В новой сборке реализованы два пункта.
1. Строки больше не обязаны иметь пробел после кавычки. Иными словами, " 123" и "123" означают строку, состоящую из трех символов 1, 2, 3. Возможность такой обработки регулируется переменной SMARTSTRING (истинное значение разрешает поиск обработку строк, начинающихся с кавычки, и не имеющих после нее пробела).
2. Добавлен вектор WINMSG и связанные с ним переменные MSG.PROCESSED WMSG MSG.WPARAM MSG.LPARAM. Это вектор вызывается каждый раз в процессе обработки сообщений. В переменные WMSG MSG.WPARAM MSG.LPARAM записываются соответственно тип сообщения и его параметры. Если вектор установил в ИСТИНУ переменную MSG.PROCESSED, то более это сообщение не обрабатывается (в том числе и с помощью DefWindowProc). Это позволяет полностью заменять обработчик сообщений Quark-Forth.

Автор:  Hishnik [ Пн мар 29, 2010 21:32 ]
Заголовок сообщения: 

Кстати, кто бы чего ни говорил, а строки в привычном представлении программиста, без пробела после кавычки, вполне удобны и ликвидируют "мыслительную паузу" в виде "не забыть поставить пробел после кавычки". Пока ни в одном проекте проблемного поведения не обнаружено.

Автор:  вопрос [ Пн мар 29, 2010 21:54 ]
Заголовок сообщения: 

Хищник писал(а):
Кстати, кто бы чего ни говорил, а строки в привычном представлении программиста, без пробела после кавычки, вполне удобны и ликвидируют "мыслительную паузу" в виде "не забыть поставить пробел после кавычки". Пока ни в одном проекте проблемного поведения не обнаружено.
Замечательно

Автор:  WingLion [ Вт мар 30, 2010 06:32 ]
Заголовок сообщения: 

Кстати, можно спокойно считать, что если слово, начинающееся с кавычки, не найдено в словаре,
то это начало строки, которая кавычкой должна завершиться.
И то же самое стоит сделать, для слов, начинающихся со скобки ( и со слеша \
тогда, и "проблема забывания пробела перед комментарием" пропадет.

Автор:  chess [ Вт мар 30, 2010 09:15 ]
Заголовок сообщения: 

Хищник писал(а):
Кстати, кто бы чего ни говорил, а строки в привычном представлении программиста, без пробела после кавычки, вполне удобны

Тогда последовательности типа этой
Код:
"    hgjh"
строками уже не будут что-ли?

Автор:  Hishnik [ Вт мар 30, 2010 09:27 ]
Заголовок сообщения: 

WingLion писал(а):
Кстати, можно спокойно считать, что если слово, начинающееся с кавычки, не найдено в словаре,
то это начало строки, которая кавычкой должна завершиться.

Так и есть.
WingLion писал(а):
И то же самое стоит сделать, для слов, начинающихся со скобки ( и со слеша \
тогда, и "проблема забывания пробела перед комментарием" пропадет.

А вот тут не было бы коллизий, но тоже можно подумать. Со скобки часто начинают низкоуровневые слова, например (DO) и ему подобные. Но вот комментарии до конца строки вполне подходят для подобной обработки. Еще ведь подсветка синтаксиса отмечает кварковские // (которые аналогичны \), но делает это независимо от того, есть после них пробел, или нет.

Автор:  Hishnik [ Вт мар 30, 2010 09:30 ]
Заголовок сообщения: 

chess писал(а):
Тогда последовательности типа этой Код:
" hgjh"
строками уже не будут что-ли?

Будут, конечно. Кавычку-то никто не отменял. Просто в " hgjh" отработает кавычка и положит строку hgjh, а если набрать "hgjh", то слово окажется не найдено и подхватится в NUMBER, который и увидит, что ненайденная последовательность начинается с кавычки, а значит, представляет собой строку.

Автор:  вопрос [ Вт мар 30, 2010 11:01 ]
Заголовок сообщения: 

Хищник писал(а):
chess писал(а):
Тогда последовательности типа этой Код:
" hgjh"
строками уже не будут что-ли?

Будут, конечно. Кавычку-то никто не отменял. Просто в " hgjh" отработает кавычка и положит строку hgjh, а если набрать "hgjh", то слово окажется не найдено и подхватится в NUMBER, который и увидит, что ненайденная последовательность начинается с кавычки, а значит, представляет собой строку.

надо же, опять разночтение! (с пробелом строку как сделать с помощью одной кавычки?) :D

Автор:  Hishnik [ Вт мар 30, 2010 11:11 ]
Заголовок сообщения: 

вопрос писал(а):
надо же, опять разночтение! (с пробелом строку как сделать с помощью одной кавычки?)

" "
Два пробела после кавычки. Первый нужен для выделения первой кавычки, второй обработается самой кавычкой. Это штатное поведение слова "

Автор:  chess [ Вт мар 30, 2010 11:30 ]
Заголовок сообщения: 

вопрос писал(а):
надо же, опять разночтение! (с пробелом строку как сделать с помощью одной кавычки?)

В QUARK реализовано два метода обработки строковых литералов:
первый - стандартный с помощью слова "(кавычка) - тут пробелы после кавычки и пробела включаются в стороку
второй - аналогичный обработке числовых литералов - тут нет начальных пробелов в строке
Чтобы реализовать распознавание строк только одним методом надо отказаться от слова "(кавычка)
и написать отдельный транслятор для обработки строк, что будет гораздо сложнее чем комбинировать два существующих
метода.

Автор:  chess [ Ср мар 31, 2010 11:37 ]
Заголовок сообщения: 

Хищник писал(а):
Пока ни в одном проекте проблемного поведения не обнаружено.


Проблемное поведение будет только в случае если определить слово, начинающееся с "(кавычки),
а затем определить строку без пробела после кавычки, которая начинается с этого слова.

Код:
: "spisok  1 ;

: s2 "spisok 2" ; 

: s3 "spisok 3 " ;   


так что вряд-ли дождетесь.

пс. Это конечно при корректной реализации строк.

Автор:  вопрос [ Ср мар 31, 2010 12:23 ]
Заголовок сообщения: 

chess писал(а):
Хищник писал(а):
Пока ни в одном проекте проблемного поведения не обнаружено.

Проблемное поведение будет только в случае если определить слово, начинающееся с "(кавычки),
а затем определить строку без пробела после кавычки, которая начинается с этого слова.
Код:
: "spisok  1 ;

: s2 "spisok 2" ; 

: s3 "spisok 3 " ;   


так что вряд-ли дождетесь.
пс. Это конечно при корректной реализации строк.

ну я же говорил, что неоднозначность должна появляться, только не там её нашёл :(

Автор:  _Harry [ Ср мар 31, 2010 17:10 ]
Заголовок сообщения: 

WingLion писал(а):
И то же самое стоит сделать, для слов, начинающихся со скобки ( и со слеша \

А как быть с \EOF ??
Яркий пример того что не надо трогать устоявшиеся механизмы.
Мне лично пробел не мешает и пауз в мыслительном процессе нет.
Я его автоматом ставлю не задумываясь даже в ассемблерных командах :lol:

Автор:  Hishnik [ Ср мар 31, 2010 18:07 ]
Заголовок сообщения: 

chess писал(а):
Код:
: "spisok 1 ;

: s2 "spisok 2" ;

: s3 "spisok 3 " ;


так что вряд-ли дождетесь.

А что тут не так? Во-первых, "spisok 2" состоит из двух слов - "spisok и 2", второе из которых будет не найдено. Во-вторых, некорректное поведение будет довольно быстро обнаружено при тестировании слов, и проблема решается простой постановкой пробела... это если уж так приспичило ввести слово, начинающееся с кавычки. Наконец, написано же в верхнем посте - SMARTSTRING есть. Пишем ноль, и нет такой обработки, остается только " как слово Форта.
вопрос писал(а):
ну я же говорил, что неоднозначность должна появляться, только не там её нашёл

И где ж тут неоднозначность в правильном понимании этого термина?
_Harry писал(а):
Мне лично пробел не мешает и пауз в мыслительном процессе нет.

Мешает тем, кто начинает осваивать Форт. Когда в самых базовых вещах наблюдается слишком много "инаковости", это мешает переходить к собственно программированию.

Автор:  WingLion [ Ср мар 31, 2010 18:29 ]
Заголовок сообщения: 

_Harry писал(а):
А как быть с \EOF ??


Использовать там, где оно надо... И не втыкать куда не надо

Я же писал: Если слово, начинающееся с кавычки (слеша/скобки), не найдено в словаре,
то это и должно повлечь за собой новое поведение интерпретатора.
Но никак не изменение поведения слов, которые с этих знаков начинаются.

Страница 1 из 3 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/