Forth http://www.fforum.winglion.ru/ |
|
преобразование строкового представления угла вида 12°12'12" http://www.fforum.winglion.ru/viewtopic.php?f=25&t=2929 |
Страница 2 из 5 |
Автор: | gudleifr [ Вс май 05, 2013 00:51 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
mOleg писал(а): что есть слово WORD ? Ну, оно-то в ANS 94 все-таки есть.
|
Автор: | mOleg [ Вс май 05, 2013 01:01 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
gudleifr писал(а): Ну, оно-то в ANS 94 все-таки есть. Ясно, только его давно нет в СПФе, и тем более в форке. только я тогда совсем не понял утверждения: gudleifr писал(а): Еще чуть-чуть и Вы поймете, что слово WORD тоже является контекстом - с пустым off_quest .
|
Автор: | gudleifr [ Вс май 05, 2013 01:13 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
Ну как же, оно берет из потока очередной "токен" и... больше ничего не делает. Значит, реализоваться оно должно как контекст с пустым off_quest. |
Автор: | mOleg [ Вс май 05, 2013 01:22 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
gudleifr писал(а): Значит, реализоваться оно должно как контекст контекст сам текст не разбирает, зачем сваливать в кучу выделение лексемы и поиск в словаре? |
Автор: | gudleifr [ Вс май 05, 2013 10:49 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
mOleg писал(а): зачем сваливать в кучу выделение лексемы и поиск в словаре? Так в данном примере, вы сами отказались от поиска на диске, заменив его парсированием...Ваш метод нужно срочно аксиоматизировать. Ведь, смотрите, ваш метод контекстов позволяет писать в одном потоке на разных языках - для каждого контекста свой. Однако, Вы разделили чтение на два этапа: парсирование и поиск/парсирование. В результате, все языки должны базироваться на словах, разделенных пробелами? Или я опять что-то просмотрел? Вот, например, я сейчас понял, что имею в своем FOBOS не один а два (если добавлю консоль - три) малосвязанные случая чтения: 1. исполнение сценария: ПОТОК - текстовый файл, лексема - слово, FIND - по словарю; 2. обработка сообщения: ПОТОК - очередь приложения, лексема - структура MSG-WND-WPAR-LPAR, FIND - поиск в таблицах/деревьях. 3. консоль: похоже на (1). (Очевидно, поиск сообщения ложится под Ваш вариант поиска, за исключением наличия не одного поля связи, а двух, но вот парсирование из цикла полностью выпадает). А при распознавании C-подобного текста, поиск годится обычный, а вот парсирование должно производится явно не по пробелам. У Мура еще страшнее: он допускал возвращение на парсирование остатка лексемы. Так, что надо сильно думать над границами применения всей этой лабуды... или писать под каждую новую задачу новый вариант INTERPRET : на этом этапе ищем в словаре, на этом - по регулярному выражению, здесь - на диске, здесь - грамматический разбор... И не будет ли написание отдельных процедур off_quest приводить к куче малопонятного кода (как в случае углов) и конфликтам контекстов? |
Автор: | mOleg [ Вс май 05, 2013 12:47 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
gudleifr писал(а): Так в данном примере, вы сами отказались от поиска на диске, заменив его парсированием... Так, стоп. Причем тут разбор входного потока и поиск на диске? gudleifr писал(а): Ваш метод нужно срочно аксиоматизировать.Ведь, смотрите, ваш метод контекстов позволяет писать в одном потоке на разных языках - для каждого контекста свой. Форт это всегда позволял. gudleifr писал(а): Однако, Вы разделили чтение на два этапа: парсирование и поиск/парсирование. причем тут чтение? (судя по всему у нас разная терминология) Есть процесс разбора исходного текста, который обычно называется QUIT Внутри него происходит: 1) заполнение входного буфера из активного источника (входного потока) - REFILL 2) выделение лексем из буфера входного потока 3) поиск лексем, и в зависимости от режима работы системы компиляция\исполнение - INTERPRET В форке все этапы реализованы отличным от привычного методом, но сути своей они не меняют. gudleifr писал(а): В результате, все языки должны базироваться на словах, разделенных пробелами? Или я опять что-то просмотрел? ну, как бы входной поток всегда остается открытым, поэтому, скажем вот |
Автор: | mOleg [ Вс май 05, 2013 12:59 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
gudleifr писал(а): (Очевидно, поиск сообщения ложится под Ваш вариант поиска, за исключением наличия не одного поля связи, а двух, но вот парсирование из цикла полностью выпадает) и опять я вас не понимаю 8( какая разница, сколько полей связи? Все устройство поиска должно быть скрыто в конкретном словаре. Разбор вполне себе производится в цикле. gudleifr писал(а): А при распознавании C-подобного текста, поиск годится обычный, а вот парсирование должно производится явно не по пробелам. выше была ссылка на пример разбора текста без пробелов, повторюсь. gudleifr писал(а): У Мура еще страшнее: он допускал возвращение на парсирование остатка лексемы. это не страшее, это логичнее, и я так делал, когда пробелов нет, а есть необходимость разбирать разные там скобки, точки с запятой и прочее подобое. Собственно для этого ваш WORD должен возвращать не только выделенную строку но и код разделителя (либо строку с ним, если разделитель многосимвольный). gudleifr писал(а): Так, что надо сильно думать над границами применения всей этой лабуды... или писать под каждую новую задачу новый вариант INTERPRET : на этом этапе ищем в словаре, на этом - по регулярному выражению, здесь - на диске, здесь - грамматический разбор... смысл как раз в том, чтобы не писать каждый раз свой INTERPRET, а пользоваться стандартным. Тогда, один словарь распознает числа, другой регулярные выражения, третий отображает содержимое каталога - при наличии в контексте необходимых словарей все превращается в привычные слова и остается управляемым за счет управления контекстом. gudleifr писал(а): И не будет ли написание отдельных процедур off_quest приводить к куче малопонятного кода (как в случае углов) и конфликтам контекстов? не понял, причем тут понятность кода? есть единый интерфейс, его можно использовать для распознавания чисел в различных форматах, в том числе и углов. За контекстом приходится следить в любом случае, однако это достаточно просто и удобно. |
Автор: | gudleifr [ Вс май 05, 2013 15:41 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
mOleg писал(а): поиск на диске Описка по Фрейду, следовало читать "поиск в словаре".mOleg писал(а): 1) заполнение входного буфера из активного источника (входного потока) - REFILL Вот тут, пожалуйста, поподробнее. С (3) вроде разобрались, а как выполняется настройка (1) и (2)? Как они увязываются с настройками (3)?2) выделение лексем из буфера входного потока 3) поиск лексем, и в зависимости от режима работы системы компиляция\исполнение - INTERPRET mOleg писал(а): чтобы не писать каждый раз свой INTERPRET, а пользоваться стандартным. Вот тут вопрос: что проще? Создать INTERPRET под нужную задачу или заниматься переопределением его атрибутов "несколькими уровнями ниже"?mOleg писал(а): причем тут понятность кода? 1) В случае правки INTERPRET пользователь находит описание нюансов "чтения" там, где он его ожидает видеть. В случае "атрибутов" нужно долго и нудно отслеживать их переопределения во всех участвующих в чтении "объектах". 2) Описание "атрибутов" по мере надобности требует, судя по приведенному примеру, какой-то унификации методов, иначе как у Вас с углами - я могу верить, что Вы не ошиблись, но проверить, все ли углы обрабатываются корректно достаточно трудно. |
Автор: | mOleg [ Вс май 05, 2013 19:35 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
gudleifr писал(а): Вот тут, пожалуйста, поподробнее. Код: \ интерперетировать поток вплоть до его окончания : TranslateFlow ( --> ) BEGIN REFILL WHILE INTERPRET source-id @ IFNOT OK THEN \ только при работе с консолью REPEAT ; gudleifr писал(а): Как они увязываются с настройками (3)? похоже таки ничего вы не поняли Управление только контекстом имеется, все остальное б\м обычно реализовано. gudleifr писал(а): 1) В случае правки INTERPRET пользователь находит описание нюансов "чтения" там, где он его ожидает видеть. В случае "атрибутов" нужно долго и нудно отслеживать их переопределения во всех участвующих в чтении "объектах". если работаешь со словарем стандартным образом (обычным для форта) никаких нюансов нет. Впрочем, о каких атрибутах речь? gudleifr писал(а): 2) Описание "атрибутов" по мере надобности требует, судя по приведенному примеру, какой-то унификации методов, иначе как у Вас с углами - я могу верить, что Вы не ошиблись, но проверить, все ли углы обрабатываются корректно достаточно трудно. и я опять вас не понял. А проверить просто |
Автор: | gudleifr [ Вс май 05, 2013 20:29 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
gudleifr писал(а): похоже таки ничего вы не поняли Потому и прошу объяснить... На халяву... Я понимаю Ваш вариант так: (термины условные, стековые и управляющие операторы опускаю) ALSO КОНТЕКСТ-REFILL ALSO КОНТЕКСТ-WORD ALSO КОНТЕКСТ-NUMBER ALSO КОНТЕКСТ-FIND СИСТЕМА по сравнению с самым кондовым: : REFILL' ... ; : WORD' ... ; : NUMBER' ... ; : FIND' ... ; : СИСТЕМА' ... REFILL' ... WORD' ... FIND' ... NUMBER' ... ; СИСТЕМА' И никак не могу понять выгоду Вашего варианта... mOleg писал(а): о каких атрибутах речь Например, об off_quest. Т.е. об атрибутах, позволяющих обеспечить нестандартное поведение стандартных конструкций.mOleg писал(а): А проверить просто Дейкстра в таких случаях говорил: "Выкидываю, не пытаясь понять".Проверить Ваш распознаватель можно только одним способом - просчитав в уме. Что займет ровно столько же времени, сколько написание своего варианта. Строчка: ([0-9]+°([0-9]+\')?([0-9]+\")?)|([0-9]+\'([0-9]+\")?)|[0-9]+\" читается все-таки проще. |
Автор: | mOleg [ Вс май 05, 2013 22:01 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
gudleifr писал(а): Я понимаю Ваш вариант так: нет, в контексте после запуска три словаря: ROOT NUMBERS FORTH если не хочется чего-нибудь странного, работаем как обычно. Т.е. понимаете, похоже, не правильно. gudleifr писал(а): Например, об off_quest. Т.е. об атрибутах, позволяющих обеспечить нестандартное поведение стандартных конструкций. "смешались в кучу кони люди" обычно словарная статья состоит из 3-4 полей: связи, имени, кода, параметров - их количество фиксировано и не изменяется от словаря к словарю. Из перечисленных четырех полей только одно оказывается уникальным, остальные могут разделяться с другими определениями. В форке эти самые поля называются атрибутами исходя из целого ряда причин. off_quest не является атрибутом слова, а является смещением в структуре, описывающей конкретный словарь. Цель переделки словарей в форке как раз обратная - обеспечение стандартное поведение нестандартных конструкций . gudleifr писал(а): Строчка:([0-9]+°([0-9]+\')?([0-9]+\")?)|([0-9]+\'([0-9]+\")?)|[0-9]+\"читается все-таки проще. угу, только сам механизм регулярных выражений, как минимум, на порядок сложнее, больше и медленнее. |
Автор: | gudleifr [ Вс май 05, 2013 22:21 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
mOleg писал(а): если не хочется чего-нибудь странного Я говорю о "странном". Если не хотеть странного, то Ваша схема вообще не дает преимуществ.mOleg писал(а): off_quest не является атрибутом слова А словарь не слово? А слова, которые читают/распознают поток ввода - не слова? INTERPRET - не слово?gudleifr писал(а): только сам механизм регулярных выражений, как минимум, на порядок сложнее, больше и медленнее. Проще, меньше и быстрее.
|
Автор: | mOleg [ Вс май 05, 2013 22:35 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
gudleifr писал(а): Я говорю о "странном". Если не хотеть странного, то Ваша схема вообще не дает преимуществ. если хочется странного, то начинается создание собственного словаря, который позволяет реализовать что душе угодно. gudleifr писал(а): А словарь не слово? а каталог это файл, и что? gudleifr писал(а): Проще, меньше и быстрее. код в студию. |
Автор: | gudleifr [ Вс май 05, 2013 22:42 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
mOleg писал(а): ачинается создание собственного словаря а разве это не сводится к тем схемам, что я привел выше?mOleg писал(а): каталог это файл Я говорил об атрибутах, изменяющих смысл слов, участвующих в работе INTERPRET...mOleg писал(а): код в студию Все необходимые Вам выкладки приведены у Ахо, Хопкрофта и Ульмана... Вы же знаете, я лентяй, и не пишу код заранее. Частные случаи конечных автоматов, распознающих ввод, можете посмотреть в FOBOS.
|
Автор: | mOleg [ Вс май 05, 2013 23:03 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
gudleifr писал(а): а разве это не сводится к тем схемам, что я привел выше? нет gudleifr писал(а): Я говорил об атрибутах, изменяющих смысл слов, участвующих в работе INTERPRET... уф, всеравно ерунда получается. Вы бы все-таки описание почитали. Иначе дикая терминологическая разноголосица убивает. gudleifr писал(а): Все необходимые Вам выкладки приведены у Ахо, Хопкрофта и Ульмана... Вы же знаете, я лентяй, и не пишу код заранее. я ведь за язык не тянул, сам сказал, что код будет проще, так теперь не ленись уж. |
Страница 2 из 5 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |