Форум » » Парсер (синтаксический анализатор) на урке » Ответить

Парсер (синтаксический анализатор) на урке

Korwin: Вопросы, на один из которых я сам ответил отрицательно: 1. Можно ли на URQL сделать работающий парсер (т.е. текстовый ввод команд игрока), который бы: - нормально работал, уверенно распознавая не менее 25 (до 70 с синонимами) глаголов, до 300 существительных, предлоги, прилагательные и т.д; - позволял бы обогатить игру собственной инициативой игрока, не зажатого более в рамки меню; - не затруднял бы игрового процесса. 2. Нужно ли это делать. Ваше мнение?

Ответов - 46, стр: 1 2 3 All

Goraph: Можно - бесспорно. Нужно - нет. Ну в качестве примера или памятника для потомков не помешает - но вообще он не нужен. Почему? Потому что ты не сможешь сделать нормальный парсер просто из-за того что урка очень ограниченный язык. А если сможешь - то он будет написан так страшно, что ты сам его будешь бояться. И вообще - посмотри в тадсы. :) Там сложно, но после того как ты напишешь парсер, он вряд ли будет проще :) Korwin пишет: цитатаЛучше не оригинально, но хорошо, чем оригинально, но плохо. Прочитай еще раз свою же цитату.

Гость-195950: лучше вопрос поставить так - хотите ли вы сделать из всего множества вариантов игр возможных к реализации на урке одну - угадай слово ?

Гость-195950: [чуть позже...] кстати, в теперешнем состоянии урка (и игры на ней) портируема на другие платформы, (тот-же GBA) у которых клавиатуры почти нет :), с парсером же это будет не игра а мучение... (медицине такие случаи известны!) ...лучше бы собрались (с мыслями) и придумали инструкции для вывода текста в одно «окно» а менюшки(ок) в другое...

Евгений: Хе-хе. А вот у меня противоположная мысль - в GUI версии избавиться от этого непонятного деления на кнопки и текст. ИМХО, они, как продолжение цельной мысль разработчика, должны быть единым целым :) ЗЫ: Хотя, по-хорошему, всё это будет настраиваться.

Axel: просто добавь «мышку»... хотя, тогда получится гипертекст, уж не знаю хорошо это или плохо... вот еще идейка для GUI версии - если вместо «букв» печатать «тайлы», может получиться забавно... т.е. «шрифт» - это картинка (скажем 256х256, т.е. 16х16 картинок, где каждая картинка 16х16 точек) при печати прога просто берет ASC код буквы (порядковый номер картинки (тайла)) и выводит его как если бы это была буква... тогда, придумав инстркуции для смены «шрифта» можно выводить что угодно, оставаясь при этом в рамках алгоритмов «печати» урки...

Евгений: То есть как это «добавь мышку»? :) В Гуе она есть по умолчанию. Разумеется, выбирать действия можно будет как мышью так и клавиатурой. Насчет вывода текста пока ещё не решили ничего. На первых порах будет что-нибудь стандартное, вроде обычного текстового поля, но, конечно, хотелось бы что-то покрасивше. Вообще да, хорошо бы оставить в GUI досуркин интерфейс в виде какого-то скина :) Только не соображу пока, какой смысл использовать картинки? Чтобы можно было свой шрифт нарисовать? А если захочется размер шрифта поменять.. думаю растягивать потом эти картинки будет не лучшей идеей :)

Axel: ››Только не соображу пока, какой смысл использовать картинки? а вот представь, что вместо «букв» там скажем домик нарисован ;) (и почту посмотри... на ___@bk.ru)

Axel: не шрифт, а чтобы можно было вывести на экран картинку просто выведя на печать некую текстовую последовательность... этот подход позволит не добавляя ничего очень заумного сделать «печать» для графики...

Fighter: Я дико извиняюсь... А эту ГУЮ можно где-нить достать?

Walky Talky: Раздел «URQ_DOS», старая версия GUI (2003 г.): http://urq.ru/urq_dos/130b4ds5b_gui.zip

Евгений: Это старый Гуй, не ходите по этой ссылке :)

Walky Talky: Черт побери, так новой и нет :)

Terracon: Тысяча чертей, а где xbtn?

Korwin: Из спортивного интереса пишется парсер на URQ. Разработку можно будет использовать для написания собственных игр. Возможности (пока предполагаемые) использование синонимов для глаголов, существительных, прилагательных, наречий и предлогов - с распознаванием всех этих частей речи. Операции с инвентарем, встроенная помощь, любой порядок слов в предложении, поддержка косвенной речи (сказать роботу сломать стену) и др. фичи.:) Кому-то это интересно?

Fighter: Было бы прикольно... Но надо ли?

Axel: ...а ввод будет с виртуальной клавиатуры ? :) (тоже менюшный)

Korwin: Нет проблем! Можно сделать по anykey - русский ввод. Это надо? Или я не понял Вас?

Axel: упс :) , я забыл, что есть оператор input...

der stein: Почитал всё выше написаное и понял, что парсер сложно делать, но на нём польчаются более интересные и сложнее, но (как я понял) не все хотят прошяться с «менюшним» урк. Предлогаю координальное решение проблемы, а именно: продолжать работы над «менюшном» урк, и начанать работы над парсером, и разрабатывать их парраллельно. Хотя это займёт очень много времени, усилий и т.д. Думаю одному Вику с этим не справиться, но только потому что день = 24 часа. Предлогаю другую кандидатуру - Крол :))))))) Помниться он как-то написал подобие win_urq где работали 2 оператора. Думаю, стоит продолжеть дисскуссию по этому вопросу.

Axel: цитатаи понял, что парсер сложно делать, но игры на нём получатся более интересные и сложнее ты понял не правильно - парсер написать можно (но сложно) - парсер пишется на УРКИНОМ языке, а не встраивается внутрь интерпретатора - игры, использующие ввод комманд, совсем не обязательно интереснее, чем менюшные, чаще, в играх с вводом комманд вся игра заключается угадывании последовательности слов, которая приводит к желаемому (автором квеста) результату... а сюжет... ...сюжет отходит на второй план...

der stein: сюжет... ...сюжет отходит на второй план... Ну почему же. Если делать хороший, качественный, продуманный квест, то сюжет может оказаться и на первом месте

Евгений: «позволял бы обогатить игру собственной инициативой игрока, не зажатого более в рамки меню» - Это все фикция :) Игрок зажат так же как и прежде... Просто в меню мы не будем писать таки бредовые варианты, как «взять луч» и т.д. :)

Korwin: Евгений пишет: цитатаЭто все фикция :) Игрок зажат так же как и прежде... Просто в меню мы не будем писать таки бредовые варианты, как «взять луч» и т.д. :) - в самую точку! Но парсер я все-таки сделаю - очень уж это интересно. Вот Евгений сделал - и утратил интерес :) Может быть, этим надо переболеть? :)

HIman: 1. Сделать можно всё! 1.1. инициативу не прибавит только что интуицию будет развивать 1.2. из-за плохой интуции у игрока, игровой процесс только усложнит. 2. Для менюшных квестов не нужно! 3. Чтобы игрок чувствовал себя комфортно и сухо, нужно в меню ставить простые естесственные команды, перейти+взять+поговорить+и.т.п. Отсальные дейсвия делаются на предметах (в QSP), вариант для URQ, появлением новых команд в зависимости от наличия/отсутствия предмета. На долю «парсера» хотя это уже не парсер будет остается вод кодов к сейфам, назывании паролей, набора номеров телефонов и т.п. Вот такое мое мнение :)

Korwin: HIman пишет: цитата1. Сделать можно всё! ... Попробуйте укусить локоть :) Или поднять себя за свои же волосы... HIman пишет: цитата1.1. инициативу не прибавит только что интуицию будет развивать Хоть что-то разовьется... HIman пишет: цитата1.2. из-за плохой интуции у игрока, игровой процесс только усложнит. Хмм... Так надо равняться не на узкие места. А то мы скатимся к видеоквестам, где думать практически совсем не надо... HIman пишет: цитата2. Для менюшных квестов не нужно! Парсер - это уже не менюшный квест. Главное преимущество текстового ввода - отсутствие заранее известного выбора. Он есть, разумеется, но об этих вариантах нужно догадаться... По крайней мере, развиваются: а) мозги; б)пальчики - что тоже не вредно для развития мозга... в) знание русского языка (при условии наличия таковых знаний у автора квеста (трудно догадаться ввести команду «ПАЛОЖИТЬ МЕЧЬ НА КАМИНЬ») HIman пишет: цитата3. Чтобы игрок чувствовал себя комфортно и сухо, нужно в меню ставить простые естесственные команды, перейти+взять+поговорить+и.т.п. Отсальные дейсвия делаются на предметах (в QSP), вариант для URQ, появлением новых команд в зависимости от наличия/отсутствия предмета. На долю «парсера» хотя это уже не парсер будет остается вод кодов к сейфам, назывании паролей, набора номеров телефонов и т.п. Вот такое мое мнение :) - ХОРОШИЙ ВАРИАНТ КВЕСТА... НО СЕЙЧАС РЕЧЬ НЕ О ТОМ НЕМНОГО...

Saruman: Ну так чем там дело кончилось? С этим Вашим парсером? Или все как всегда - одни разговоры...

Дженни: Скажу по секрету - кое что готовится к зимней олимпиаде именно по-этой теме... Но: Тсс!

Капитан Блуд: Сделать парсер очень легко. Для этого достаточно одного дня. :) Чтоб сделать хороший парсер, да еще и русского языка нужно потратить очень очень много времени. Скорее всего на это уйдут годы. Korwin пишет: По крайней мере, развиваются: а) мозги; Бред. При примерно одинаковом количестве затраченного на паззл количства времени програмиста, паззл не должен и не будет решаться быстрее или легче в менюшной игре. Если конечно это не паззл типа "угадай слово", что есть плохо, надеюсь не надо объяснять почему. Разница между менюшными и парсерными паззлами только в том, что на программирование менюшных тратят минуты, а на программирование парсерных дни (хороших парсерных паззлов конечно, можно написать парсерный паззл за 15 минут, но запоминаются не такие). Миф о том что парсерные игры проще парсерных, связан думаю с тем, что они непопулярны на западе (что понятно - английский язык намного проще русского и написать хороший парсер не так сложно). Японцы и китайцы почемуто пока не пишут для своих игр парсеры, и вроде никто не жалуется. А парсер на японском или китайском языке, это не менее дико чем парсер на русском (насколько я знаю, русский считается вторым по сложности языком в мире, после японского). Korwin пишет: б)пальчики - что тоже не вредно для развития мозга... С этим не поспоришь. :) Korwin пишет: в) знание русского языка (при условии наличия таковых знаний у автора квеста (трудно догадаться ввести команду «ПАЛОЖИТЬ МЕЧЬ НА КАМИНЬ») Вообще-то хороший парсер такую команду должен понять и правильно обработать. В крайнем случае переспросить - "на камень или на камин?". В парсере игры Валгалла, которая была написана на бейсике(!) для Спектрума 48кб(!) в 1984 году (!) команды типа "tak swod" или "tke sord" понимались. Да, там был достаточно маленький словарь. Но там была графика, а мы не в 84м году, и у нас нет ограничения в 48 килобайт. Если ты хочешь сделать еще один парсер в стиле "угадай слово" (такое впечатление создается), так это никому не надо. Кстати чем не устраивает парсер в тадсах? Да он неидеален, но чтоб сделать лучше нужно очень очень много времени. Выучить тадс даже с нуля, даже не програмисту и довести его до ума думаю проще. Кстати подход, что тадс мол сложно, я свой парсер напишу, почемуто часто очень встречается - хотя какой парсер может написать человек неспособный разобраться даже с тадсом? Какой-то может. Я тоже могу написать парсер за час. Только в эту игру невозможно будет играть. ЗЫ: Свой парсер я тоже делал. И не один. Переболел

VampirE: Есть же готовый RTADS, зачем на урке делать парсер? Хотя, если чисто из спортивного интереса, то можно. )

][ломидоманад: VampirE Можно начать. Можно даже сделать. Но так, чтобы он был по крайней мере не хуже, чем тот же тадсовский (не говоря уж, допустим, об инфокомовском) - почти нереально. Во всяком случае, одному человеку, работающему на собственном энтузиазме. Если бы вот, скажем, Абрамович вложился в URQ, то таких парсеров, наверно, сразу десяток бы появился:).

Belial : и рухнул бы наш маленький, уютный мирок :(

GHOST: Где Все Друг Друга знают.

Korwin: ][ломидоманад пишет: Можно начать. Можно даже сделать. Но так, чтобы он был по крайней мере не хуже, чем тот же тадсовский (не говоря уж, допустим, об инфокомовском) - почти нереально. Во всяком случае, одному человеку, работающему на собственном энтузиазме. Стоп! 1. А сколько надо человек, работающих на собственном энутзиазме, чтобы сделать хороший парсер? 2. А что такое хороший парсер? Может для игры достаточно удобного? Работающего по определенным соглашениям? А то правда, всегда найдется тип, который сел не играть, а парсер испытывать и состроив мудрёную фразу: "Лихо плюнуть в левый глаз правой головы Змей Горыныча и быстро-быстро убежать, закрывая спину мифриловым щитом!" - убедятся, что парсер ее не понимает, и скажут - "фиговая игра". Может достаточно, чтобы парсер понимал: 1. Общепринятые сокращения из одного слова/буквы (и - инвентарь, с-север, ю-юг, в-восток, з-запад, п-повтор пред.команды, о-осмотреться и т.п.); 2. Первым словом - глагол в неопределенной форме или повелительном наклонении (искать, ищи) - и выдавала ошибку ("не вижу здесь знакомого глагола") если первое слово не входит в список сокращений или известных глаголов; 3. Прочие слова - после глагола - являлись бы объектом на который направлено действие. "Взять зеленую палочку" - правильно, "Подцепить зеленую палочку крючком" - неправильно. 4. Допускаем, что запятые=точке=точке с запятой=союзу и и могут применяться только для разделения действий в одном предложении как-то "взять меч и стукнуть стражника"="Взять меч. Ударить гвардейца." 5. Для того, чтобы оперировать с несколькими объектами вводим понятие "предмета инвентаря в руках". Т.е. в вышеприведенном примере "взять меч" - мы "активируем объект меч в руках" - стукнуть стражника понимается как "стукнуть стражника мечом" (а не пальцами по носу) 6. Осталось добавить что при отсутсвии глагола во втором предложении он берется из первого и оп-ля - пригодный к работе парсер готов! ("Взять ягодку и гриб"="взять ягодку. взять гриб.") Всё это вполне можно сделать на урке... только занят я.

][ломидоманад: Korwin пишет: 1. А сколько надо человек, работающих на собственном энутзиазме, чтобы сделать хороший парсер? Несколько. Два-три по крайней мере, чтобы подгонять друг друга и отвечать за разные стороны работы. Один, например, занимается анализатором, другой словарем, а третий - падежными формами, склонением и т.п. А в идеале кто-нибудь еще все это и контролирует. Плюс нужны еще тестеры, но с этим проблем, думаю, не возникнет. А то правда, всегда найдется тип, который сел не играть, а парсер испытывать и состроив мудрёную фразу: "Лихо плюнуть в левый глаз правой головы Змей Горыныча и быстро-быстро убежать, закрывая спину мифриловым щитом!" - убедятся, что парсер ее не понимает, и скажут - "фиговая игра". А что, если бы парсер понимал такое предложение, это было бы недостатком?))) К программе "минимум" от себя могу добавить механизм уточнения: >>Осмотреть замок Готический замок или замок на воротах? И третий пункт убрать бы... так сделать сложнее, но, если бы "подцепить палку крючком" понималось и обрабатывалось (так же, как, например "убить гоблина дубиной" и "убить гоблина из пистолета" - разница-то есть), это было бы идеально.

Korwin: ][ломидоманад пишет: "Лихо плюнуть в левый глаз правой головы Змей Горыныча и быстро-быстро убежать, закрывая спину мифриловым щитом!" ... А что, если бы парсер понимал такое предложение, это было бы недостатком?))) И как-это игрок должен догадаться плюнуть именно в левый глаз правой головы? :) Мы игру делать собираемся или же отрабатывать систему распознавания речи? Вторая задача - могу Вас заверить вполне компетентно, гораздо сложнее. ][ломидоманад пишет: К программе "минимум" от себя могу добавить механизм уточнения: >>Осмотреть замок Готический замок или замок на воротах? Угу. Это надо. Но это ж опять RTADS получается! ][ломидоманад пишет: И третий пункт убрать бы... так сделать сложнее, но, если бы "подцепить палку крючком" понималось и обрабатывалось (так же, как, например "убить гоблина дубиной" и "убить гоблина из пистолета" - разница-то есть), это было бы идеально. Ну так см. п.5 Взять пистолет. Убить гоблина. - вроде несложно?

Капитан Блуд: Korwin пишет: Всё это вполне можно сделать на урке... только занят я. Можно и на урке. Можно на бейсике. Можно даже в бат файлах такое написать. Вопрос только зачем? Korwin пишет: Угу. Это надо. Но это ж опять RTADS получается! Можно вопрос? Чем всетаки РТАДС не устраивает? Что ты так упорно защищаешь идею заведомо худшего парсера? Я тут поиграл в игру Белиала про расхитительницу варенья. Все тексты локаций написаны здорово, это мне понравилось, но... играть я в это немогу. Впрочем довести до ума игру можно, если потратить на доводку еще часов 10-15, что кстати совсем немного для парсерной игры. :) Дальше будет спойлер, кто хочет в это играть не читайте! [Warning, spoiler ahead] Скажу только что я 15 минут угадывал какой командой надо пролезть под кроватью. И не угадал. Хотя что именно это надо делать, было както сначала очевидно (просто других вариантов у меня не было). Правильным ответом было (не уверен что это так пишется - я посмотрел в коде, но в игре не проверял)... "лечь на пол". В игре нет ни нормального хелпа, ни системы подсказок, ни элементарно списка всех понимаемых ей слов... Не хочу я играть в такую игру. Я лучше пойду допройду Vespers или перепройду All Roads. [end of spoiler] При всех недостатках РТАДС у него есть 2 достоинства. Первое - это лучший парсер русского языка на сегодняшний день, сравнимых с ним нет и что-то лучшее напишут только после того как рак на горе свистнет, а Вик сделает гуй. Второе - при всех его недостатках, после 2-3 игр привыкаешь к тому что парсер понимает и что нет, и проблемы с парсером сводятся к минимуму. И я искренне считаю что человек знакомый с основами програмирования, читая английский мануал (а не тот что гранд сотоварищи на русский перевели меньше половины), может разобраться с РТАДС за 2-3 дня, после чего писать на нем значительно проще чем на урке. Правда буржуи почемуто считают, что для этого нужен месяц.

Korwin: Капитан Блуд пишет: какой командой надо пролезть под кроватью. И не угадал. Хотя что именно это надо делать, было както сначала очевидно Ну что сказать? Я застрял на том же самом месте. Искал обходные пути... Но потом угадал :) за 1 минуту. (Возможно, дело в том, что когда-то я начинал с ZX - а там было много квестов, где требовалось именно угадать слово - я не утверждаю что это хорошо). Однако попытка написать на этой платформе что-то свое - несмотря на очень дружественную помощь со стороны Belial, убедила меня в том, что RTADS - всё таки лучше... и примеров там больше, и специалистов...

][ломидоманад: Korwin пишет: RTADS - всё таки лучше... и примеров там больше, и специалистов... Потому и лучше, что примеров создано много и специалистов набралась толпа. Именно то, чего не хватает урке. Имхо. А что касается RTADSа, то да, он хорош, хотя и не совершенен. Но создано ведь МОРЕ англоязычных движков, многие из которых адаптированы и под другие языки. Почему не может быть такого разнообразия в русскоязычном IF? Адаптировать сложно, это понятно, такой уж язык у нас... но значит надо создавать?.. (Это не призыв к действию, а просто конечный пункт моих рассуждений).

Ultrafox: Ребят, а подскажите, как правильно командую строку сделать? А то поднадоели мне эти варианты действий. Как-то с ними слишком легко получается. Хочу, чтобы как в старых добрых – пишешь «открой дверь», он и открывает. На URQ я таких игр что-то не встречал, а сам додуматься не могу.

Акела: вик, предлагаю создать тред "для новичков" и перенести подобные вопросы туда Ultrafox, urq - менюшная платформа, а не парсерная. Т.е. расчитана именно на "варианты действий", хотя есть некоторые инструменты для работы со строками, к примеру: input <переменная> - ввести строку в переменную. ну а потом можно использовать "==" и "=". (if x=="*пароль*" then ... итд)

Ultrafox: Ну основы языка я то более-менее знаю. Просто думал, что как-нибудь и строкой квест на ней создать возможно. Но всё равно за ответ спасибо :-)

Евгений: Можешь ЗИФ поглядеть http://urq.allquests.ru/qst/gobbid.rar, там великий и ужасный компромис между меню и вводом.

Ultrafox: Оки, гляну. А вообще я уже нашёл топик по этой теме - http://urq.borda.ru/?1-0-0-00000075-000-10001-0-1162586583 Так что извините, надо было сразу поискать.

Terracon: когда-то давным-давно была у меня идея сделать парсерную игру на урке. все это нифига нормально не работало, потому как условия со строками просто не хотели работать адекватно, но то, что успел набацать - вот: http://urq.allquests.ru/upload/wolves.rar

Belial : у меня тоже была идея, но я на все забил по причине того, что ни одна из урок адекватно не работает

Korwin: Ultrafox пишет: Оки, гляну. А вообще я уже нашёл топик по этой теме - http://urq.borda.ru/?1-0-0-00000075-000-10001-0-1162586583 Так что извините, надо было сразу поискать. Рекурсия...



полная версия страницы