Открыть главное меню

Метапарсер


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

Метапарсер
Тип Парсерные платформы, Модули INSTEAD
Разработчик(и) Пётр Косых
Языки интерфейса Русский и английский
Операционные системы Браузер, Windows, Android, macOS, GNU/Linux и другие.
Написано на Lua
Язык разработки Lua
Читаемые форматы файлов Архивы игр INSTEAD (*.zip) и Игры INSTEAD (*.lua)
Создаваемые форматы файлов
Дата первого выпуска 10 ноября 2012
Последняя версия 1.5
Дата последней версии 19 апреля 2019
Состояние
Лицензия MIT
Сайт instead3.syscall.ru/page/metaparser

Единого написания названия не устоялось, поэтому встречаются разные варианты: "Метапарсер", "метапарсер" или "МЕТАПАРСЕР", а также сокращённая форма "мп" или "МП" (в том числе такие же варианты не кириллицей, а латиницей: "Metaparser" и т.д.). Кроме того, отдельные поколения Метапарсера обозначаются добавлением числа к основному названию, в частности, "Метапарсер 2" и "Метапарсер 3".

Содержание

История

В период развития первого поколения платформы INSTEAD 1.x в 2011 году Петром Косых была создана экспериментальная разработка, так называемый "Парсерный модуль", являвшаяся первой попыткой реализации парсерного игрового процесса в рамках INSTEAD. Данный модуль реализовывал простой синтаксический анализ вводимых команд за счёт регулярных выражений, подобно платформе ADRIFT, что было призвано обойти сложности реализации полноценного игрового парсера. Однако вскорости самим разработчиком данная попытка была признана не вполне удачной, и проект Парсерного модуля был свёрнут.

Позже, в 2012 году, Пётр Косых вернулся к идеи разработки модуля INSTEAD для написания игр с текстовым вводом и 10 ноября 2012 свет увидела первая игра "Робото", портированная с RInform при помощи нового модуля, получившего название "Метапарсер". Отличительными особенностями Метапарсера, по сравнению с основными альтернативными парсерными платформами, стали:

  1. Игровой процесс был адаптирован как к клавиатурному вводу команд, так и к управлению посредством мышки, за счёт возможности кликать по названиям действий и объектов в выпадающих меню.
  2. Морфологический анализ осуществлялся посредством словаря, предкомпилируемого для каждой игры. То есть вместо алгоритмической обработки словоформ Метапарсер работал со словарём склонений, собирая для каждой игры собственную версию словаря, включавшую лишь используемые в ней словоформы.
  3. Был реализован интеллектуальный клавиатурный ввод с автодополнением и скрытыми синонимами.

Главным же техническим отличием Метапарсера от традиционных парсерных платформ был иной подход к обработке команд: он не имел полноценного синтаксического анализатора, разбиравшего команды на составные части и пытавшегося подобрать для них смоделированную реакцию игрового мира, а наоборот - на каждом шаге имел предопределённый набор допустимых команд, которые и предлагал ввести в данный момент времени. В строгом смысле парсинга команд не происходило, а само название "Метапарсер" в том числе было призвано подчеркнуть то, что это не совсем парсер.

Следующие несколько лет Метапарсер существовал именно в таком виде и с конца 2012 до конца 2017 года на нём было выпущено 11 игр (6 оригинальных и 5 портированных с других платформ).

Однако в 2017 году начался процесс разработки третьего поколения платформы INSTEAD 3.x, характеризовавшийся утратой совместимости с предыдущими версиями. Это привело и к устареванию всех модулей, написанных для предыдущих поколений, в том числе и Метапарсера.

30 июня 2018 года Пётр Косых продемонстрировал принципиально новую версию Метапарсера, основанную на API INSTEAD 3.x и построенную по принципам традиционных парсерных платформ, то есть с полноценным синтаксическим анализатором команд. Первая же стабильная версия была выпущена 11 октября того же года.

Для различения версий Метапарсера было принято следующее именование: старый Метапарсер, совместимый с INSTEAD 2.x, получил название "Метапарсер 2", а новый, совместимый с INSTEAD 3.x, - "Метапарсер 3". Или же сокращённо: "МП2" и "МП3". Числа в названии относятся именно к номерам поколений INSTEAD, с которыми совместимы модули, а не к номерам версий самих модулей. Версионирование Метапарсера ведётся отдельно.

Метапарсер 2 официально разработчиком считается устаревшим и даже удалён из актуального репозитория. Единственным рекомендуемым к использованию вариантом разработки парсерной игры считается Метапарсер 3.

Метапарсер 3 использует API INSTEAD 3.x, но в добавок базируется на библиотеке стандартных классов для описания модели игрового мира, портированной с платформы RInform с некоторыми изменениями и упрощениями. Однако дальнейшее развитие Метапарсера 3 продолжается уже независимо от RInform. Тем не менее, несмотря на то, что Метапарсер 3 переписан с нуля на иных принципах, в нём также реализованы те интерфейсные возможности, которые были в Метапарсере 2, а именно: возможность играть кликами мышки по всплывающим подсказкам и автодополнение ввода.

8 марта 2019 года, вместе с релизом INSTEAD 3.3.0, была выпущена версия консольного интерпретатора tiny-instead с поддержкой Метапарсера 3 (tiny-mp). Это позволило запускать игры на Метапарсере 3 на сервере и реализовать чат-боты для мессенджеров Telegram, Discord и социальной сети "ВКонтакте", дающие возможность играть через них в парсерные игры в режиме переписки.

3 апреля 2019 года был выпущен отдельный интерпретатор МЕТАПАРСЕР-js, реализованный на JavaScript и предназначенный исключительно для воспроизведения игр, написанных на Метапарсере 3. Он обладает меньшей функциональностью, по сравнению со стандартным интерпретатором INSTEAD, но позволяет собирать и распространять игры на Метапарсер 3 в качестве отдельного относительно компактного web-приложения, а также предоставляет потенциальную возможность реализовывать дополнительную функциональность за счёт прямого использования браузерных API.

Основные возможности

Игры для Метапарсера пишутся как и любая другая игра для INSTEAD на языке Lua. Разработчику также доступны все привычные возможности платформы INSTEAD, касающиеся визуального оформления и прочего.

Генерация падежных форм слов в Метапарсере 3 происходит автоматически за счёт словаря и, в большинстве случаев, не требует ручного вмешательства разработчика. Выявляемые слова-исключения с версии 1.5 также постепенно вносятся в словарь и становятся частью системы автогенерации словоформ.

Метапарсер 3 имеет достаточно развитую библиотеку стандартных классов и объектов, позволяющую детально моделировать игровой мир на уровне, сопоставимом с такими платформами как RTADS и RInform. Поскольку изначально стандартная библиотека моделирования мира Метапарсер 3 разрабатывалась как портирование библиотеки RInform, то именно с RInform достаточно много пересечений: от схожих принципов до одинакового текста отдельных реакций.

Интерфейс игры на Метапарсер 3 может быть тонко сконфигурирован, в частности, автор игры имеет возможность включить или отключить подсказки в виде выпадающих списков названий действий и объектов, а также задать число символов, после ввода которого будут показываться варианты предиктивного ввода. Есть и так называемый "экспертный режим", в котором все эти дополнительные возможности Метапарсера 3 отключаются, и пользователь получает классический парсерный интерфейс чисто со строкой ввода и без каких-либо подсказок и автодополнения. Всё это позволяет добиться желаемого поведения парсерной игры и либо сделать её более дружественной к неопытным игрокам, либо наоборот реализовать в наиболее традиционном варианте без лишних подсказок, создающих эффект спойлера команд, что разочаровывает опытных игроков.

Существующая консольная версия интерпретатора для Метапарсер 3 - tiny-instead (tiny-mp) позволяет реализовывать автотестирование игр за счёт их автоматического прохождения по списку команд. Кроме того, она даёт возможность реализовывать службы с серверной обработкой команд пользователя, за счёт чего, например, реализованы чат-боты для Telegram, Discord и "ВКонтакте", с которыми можно играть в игры Метапарсер 3 в режиме переписки.

Имеется отдельный интерпретатор МЕТАПАРСЕР-js, представляющий собой облегчённую версию интерпретатора INSTEAD, портированную на JavaScript и содержащую лишь необходимый минимум для запуска игр на Метапарсер 3. С его помощью можно собирать относительно компактные парсерные игры с чисто текстовым интерфейсом, но, вместе с этим, с возможностью использования браузерных API, недоступных при запуске основного интерпретатора INSTEAD в онлайн-версии.

Ссылки

См. также