RU

Анализатор кода QSP

Nex Moderator 09.08.2011 13:23 29 comments 45505 views

Некоторое время назад я написал анализатор кода QSP-игр.
Изначально он был сделан “на скорую руку” при помощи регулярных выражений, и из-за этого был примитивным, поэтому я распространял его только лично, с подробной инструкцией по использованию и перечислением имеющихся недостатков.

Этим летом я переработал код, написав полноценный анализатор синтаксиса QSP без регулярных выражений.

Анализатор выполняет проверку на двух уровнях:
1. Проверка синтаксиса. Все ошибки, которые можно однозначно определить по соответствию синтаксическим правилам языка QSP.
Пример: незакрытые многострочные операторы, незакрытые скобки, неверное количество аргументов функции и т.д.
2. Предупреждения. Предположения об ошибках, основанные на анализе структуры игры - переменные, локации, предметы, действия.
Пример: локации, на которые нет перехода, использование неинициализированных переменных, попытка удалить предмет, который нигде не добавляется, и т.д.

Ссылка на проект, для тех, кому интересно: http://code.google.com/p/qsp-analyser/

Главная ценность проекта - исходный код, который полностью открыт. Его я буду обновлять регулярно, по мере работы над проектом.

Внимание: анализатор работает только с файлом текстового формата (TXT2GAM). Поэтому для проверки вам придётся экспортировать игру в кугене. Игра -> Экспорт -> Текстовый файл формата TXT2GAM.

Скачать

Замечания, предложения - приветствуются.

Edited at 25.04.2014 03:33 (11 years ago)

Оба уровня проверки я намереваюсь встроить в редактор QGen, с этой целью и затеял переработку кода.
Анализатор написан на C#, а QGen - на C++, так что перенос кода тоже займет время.

Второй уровень проверки переработан, регулярные выражения больше не используются.

Выложил первый рабочий релиз.

1й уровень проверки - синтаксический анализ;
2й уровень проверки - проверяются ссылки на локации, обращения к переменным, добавление/удаление предметов и действий.

Aleks Versus Moderator 14.09.2011 18:35 (14 years ago)

Замечательная вещь. Просканировал им свою игру и нашел четыре ошибки! Неизвестное действие, два незакрытых апострофа, и Act без двоеточия.
Номера строк, которые указывает анализатор, разнятся с номерами строк в поле “выполнить при посещении”. Но это видимо потому, что в QGen я работал и с полями “описание” и “базовые действия”, их строки тоже посчитались. Утилита очень полезна. Вручную я б искал эти ошибки пару недель.

А возможность просматривать список явных переменных, действий и локаций - это просто таки мечта. Тут только такой вопрос. Что такое “потерянные локации”?

Потерянные - те, на которые нет явно заданных переходов.
Пример:

$nextloc = 'Победа'
...
GOTO $nextloc

В такой ситуации, анализатор не засчитает это за переход(обращение к локации). Но можно внести “$nextloc” в специальный список переменных в панели настроек, тогда присваивание значения будет считаться за переход.

С номерами строк, все именно так.

В самом деле, отличная вещь. Спасибо, Некс!

На здоровье. Я еще буду вносить исправления, алгоритм разбора пока что не идеален, но уже сейчас работает очень надежно.

Новый релиз утилиты, версия 1.2.24. Качаем по ссылке в первом сообщении.

Что нового:
1. Экспорт в CSV и перевод, подробнее см. в следующем сообщении. Доступен во вкладке “Конвертация”.
2. Форматирование кода - “выравнивание” кода, выставляет отступы внутри многострочных операторов. Доступно во вкладке “Конвертация”.
3. Номера строк теперь соответствуют номерам строк в текстовом файле.
4. Добавлена настройка “Разбор кода в фигурных скобках” - для тех, кто использует фигурные скобки не для записи кода.
5. Реализован разбор подвыражений - “<<$var>>”.

Также исправлено некоторое количество багов в алгоритмах разбора, и сделаны косметические улучшения.

Экспорт текстовых констант в CSV-файл и перевод.

Сделано для удобства перевода игры на другой язык. Работает так: открываем утилиту, выбираем исходный код квеста. Открываем вкладку “Конвертация”. Жмем “Экспорт в CSV”. Если в исходном файле нет ошибок, генерируется CSV-файл, в котором записана таблица из четырех колонок. В первой - номер строки таблицы и название локации, из которой взят текст. Во второй - исходный текст. В третьей - нужно вписать перевод. В четвертой можно писать любые комментарии, ее содержимое не учитывается.
CSV-файл можно редактировать во многих офисных программах. Точно он поддерживается программами OpenOffice Calc и MS Excel. Когда перевод готов, нажимаем кнопку “Сделать перевод, используя CSV”. Сгенерируется файл с именем таким как у исходного квеста + указанный суффикс(пример: исходный квест “game.txt”, CSV-файл “game.csv”, файл перевода “game_tr.txt”). Получили переведенную игру.

Для чего это нужно? Во-первых, наглядное представление не даст пропустить непереведенных строк.
Во-вторых, можно будет поручить перевод человеку, не знакомому с языком QSP.

Ну и еще это может служить удобным средством для проверки орфографии, до тех пор пока она не будет-таки реализована в кугене.

Отличное новшество с переводом, можно наши игры на английский перевести!

Ntropy,
с тем расчетом и сделано ;)

Хорошо оформленную игру на Aero, переведенную на английский, можно собрать в stand-alone swf и продать на рынке flash-игр.

Ну и англоязычному сообществу IF’еров будет что показать.

Да, отличное нововведение. Еще раз браво, Некс!
А какие еще изменения нас ждут? Какой вид приобретет анализатор в конечной своей версии?

AleKon,
пока что версия стабильная, можно брать и пользоваться. Дорабатываться она будет, если в ней обнаружатся баги, или возникнут предложения по доработке.

Интеграция в куген в планах пока?

WladySpb,
да, куген в несобираемом состоянии, ждем когда Байт пофиксит патч.

Aleks Versus Moderator 08.11.2012 18:52 (13 years ago)

У меня появилась такая мысль. Нельзя по аналогии со списком явно заданных переменных сделать список явно-заданных элементов массивов? С числовыми индексами может быть это и ни к чему, но если элементы индексируются по текстовым значениям, иногда очень трудно уследить за всеми. Было бы полезно для чистки кода.

И ещё. Чуть не забыл. У меня неверно указывает номера строк с ошибками, считает все строки подряд как будто. Предыдущая версия анализатора, если я правильно помню, указывала номер строки в локации.
Чёрт. Невнимательно прочитал нововведения. :=D А можно где-то предыдущую версию анализатора скачать? Нумерация строк по локациям меня больше устраивала.

Log in or Register to post comments.