Список форумов shedevr.org.ru shedevr.org.ru
Группа перевода приставочных игр "ШЕДЕВР"
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Написание компилятора в байткод.

 
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Экстремальный ромхакинг
Предыдущая тема :: Следующая тема  
Автор Сообщение
Gishi



Зарегистрирован: 13.04.2008
Сообщения: 6

СообщениеДобавлено: Пн Апр 14, 2008 2:36 pm    Заголовок сообщения: Написание компилятора в байткод. Ответить с цитатой

Перед тем, как в меня полетят гнилые помидоры, поясню, что это имеет самое непосредственное отношение к геймхакингу. Ковыряемая мной в данный момент игра состоит из двух, так сказать, блоков - виртуальной машины (движок) и байткода (собственно, сама игра). Байткод представляет собой обширный набор весьма высокоуровневых команд (команды, естественно, имеют переменную длину). Формат байткода более-менее разобран, написать декомпилятор с байткода в язык с кодовым названием Moonspeak Smile, думаю, будет несложно. Проблема в том, что я не знаю, как подступиться к написанию компилятора. Хотелось бы поговорить с людьми, имеющими опыт написания простейших компиляторов или парсеров, если таковые здесь имеются.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Апр 14, 2008 3:26 pm    Заголовок сообщения: Ответить с цитатой

Создай таблицу мнемоник, количеств параметров и их масок и имён. Вот и всё. Далее уже как сделаешь.
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Гость






СообщениеДобавлено: Пн Апр 14, 2008 4:30 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
Ковыряемая мной в данный момент игра
Если не секрет, что за игра?

Цитата:
Проблема в том, что я не знаю, как подступиться к написанию компилятора.
А в чём, собственно, проблема? Вообще, примерная схема комплятора выглядит следующим образом: лексический анализ -> синтаксический анализ -> семантический анализ-> генератор кода. Соответственно, подступать нужно с самой первой части Smile
Вернуться к началу
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Пн Апр 14, 2008 5:24 pm    Заголовок сообщения: Re: Написание компилятора в байткод. Ответить с цитатой

Gishi писал(а):
Формат байткода более-менее разобран


Лучше более, чем менее. Wink Если теоретическая база сама по себе зыбкая, то компилятор заранее обречён на кучу багов в самых неожиданных местах.
Конечно, в некоторых случаях стопроцентная точность не требуется, достаточно чуть модифицировать код методом проб и ошибок... но тогда вообще проще вручную скомпилировать (в Блокноте перевести свой псевдокод в байткод).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Апр 14, 2008 5:28 pm    Заголовок сообщения: Ответить с цитатой

При работе с FF7, например, я полностью декомпилировал только нужные мне инструкции, остальные просто пропускал по заранее составленной таблице размеров, определяя только мнемонику без параметров.
А компиляцию не использовал - изменял код редактором прям в потоке данных в режиме реального времени.
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Gishi



Зарегистрирован: 13.04.2008
Сообщения: 6

СообщениеДобавлено: Пн Апр 21, 2008 4:00 pm    Заголовок сообщения: Ответить с цитатой

Дико извиняюсь перед присутствующими за неоперативность. Провайдер решил на пару дней отлучить меня от интернета, а потом (не понос, так золотуха) у вашего покорного начались жутчайшие запарки с дипломом в его «заборостроительном».

Итак, касательно проекта. Речь идет о игре MOON. (именно так, с точкой в конце) студии Nexton, core team которой впоследствии перейдет в ими же основанную студию Key. Продвинутым анимешникам наверняка знакомы такие сериалы как Kanon, Air и Clannad. Все перечисленные работы представляют собой экранизации визуальных новелл с соответствующими названиями вышеупомянутой студии Key. MOON. - НЕ хентайная игра, если кого-то интересует именно этот аспект. =) Изначально в MOON. присутствовали эросцены, но из более поздних версий игры всю клубничку решили выдрать. Меня, как противника хентая в любой его инкарнации, такое решение радует.

http://en.wikipedia.org/wiki/Moon.

HoRRoR, прошу прощения, но табличные компиляторы это что-то из области первых наскальных рисунков и фигурок из бивней мамонта. =) Движок MOON. это полноценная виртуальная машина с развитой системой команд/функций, некоторые из которых имеют переменное число операндов/параметров (как, например, команда условного перехода). Ты разницу между простым интерпретатором скриптов (пусть и скомпиленных в некую промежуточную, близкую к байткоду форму) и настоящей виртуальной машиной понимаешь?

В моей виртуальной машине, помимо обширного набора реализуемых команд "виртуальному процессору", к примеру, есть область глобальных переменных, локальных переменных и стек. Даже два стека как минимум - стек для логических операций (он используется, к примеру, при вычислении истинности/ложности некоторого выражения, например, в команде условного перехода) и стек вызовов (используемый при «дальных» вызовах других модулей с байткодом).

Что такое лексический и синтаксический анализ я себе представляю. Также представляю себе, что такое генераторы парсеров – Lex/Yacc, Antlr, Visual Parse++ и иже с ними. Сложность на данном этапе представляет понимание способа задания грамматики в форме BNF. А если конкретнее, моск отказывается понимать рекурсивный способ задания оной грамматики. В общем, хотелось бы поговорить с людьми, использовавшими Lex/Yacc в реальной работе.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Апр 21, 2008 4:09 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
HoRRoR, прошу прощения, но табличные компиляторы это что-то из области первых наскальных рисунков и фигурок из бивней мамонта. =)

Ну если под таблицами ты понимаешь глиняные таблички - то да. Если грамотно всё организовать, то не придётся каждый раз перелопачивать код для добавления поддержки новой инструкции, достаточно будет подправить соответствующий элемент "таблицы". И использовать подобные структуры для динамических инструкций, переменных или т.п. тоже никто не мешает. В общем, я лишь предложил один из способов.
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Пн Апр 21, 2008 4:55 pm    Заголовок сообщения: Ответить с цитатой

Gishi писал(а):
В общем, хотелось бы поговорить с людьми, использовавшими Lex/Yacc в реальной работе.


:shock: Что-то я сомневаюсь, что тут (да и где-либо) бродят толпы такого народа. Surprised
Интересно, с какой радости вообще понадобилось организовывать виртуальную машину в простой новелле, вполне способной довольствоваться скриптовым движком? Переменные/условия и так можно было хранить/использовать.
Необходимость сложных арифметических рассчётов с переменными? Rolling Eyes
Вообще, если требуется только перевод текстовых последовательностей, я бы даже не заморачивался с написанием полноценного компилятора. Ну а если есть желание сделать новую новеллу на основе старого движка, то тут уже посещения нашего форума будет явно не достаточно... Sad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Ghost



Зарегистрирован: 24.04.2004
Сообщения: 237

СообщениеДобавлено: Пн Апр 21, 2008 10:04 pm    Заголовок сообщения: Ответить с цитатой

Ну я работал с Lex и Yacc по роду своей деятельности... писал простой парсер одного SQL-запроса.
Ещё писал программу для выполнения программ в стиле Паскаля, но она понимала только объявление переменных, выражения, оператор присваивания и условие (с else и без), но делал это без Yacc, т.е. грамматические правила проверялись методом спуска в самой программе, и грамматика была LL, а не LALR, как для Yacc (хотя для такого простого языка, который я использовал, эти грамматики не сильно отличаются). Моя программа не только читала, но и выполняла входные файлы.
Ну это так, мелочи, но с Lex и Yacc кое-как знаком.

Касательно игры: по идее байткод виртуальных машин должен представлять относительно низкоуровневые команды, как ассемблер, т.е. все команды упрощённо можно представить в таком виде:
Код:
команда    операнды
, а не в виде высокоуровневых операторов с вызовами функций и суперпозициями параметров вроде:
Код:
if (func1(++x,func2()==0)>count--) buf[p++]=*p++

Для ассемблеров применяются не КС, а более простые регулярные грамматики и подходы к генерации другие.

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

Мне одно непонятно: как ты разобрал этот байткод? Методом проб и ошибок???
А официальную информацию можно где-нибудь найти?

В крайнем случае могу посоветовать книжки по теории языков Wink, но вряд ли ты будешь их читать.
_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
wl



Зарегистрирован: 20.12.2005
Сообщения: 76
Откуда: Россия

СообщениеДобавлено: Вс Окт 05, 2008 3:44 pm    Заголовок сообщения: Ответить с цитатой

есть какие-то успехи? просто я тоже заинтересовался этой темой, применительно к psp, но там всё должно быть похоже
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Gishi



Зарегистрирован: 13.04.2008
Сообщения: 6

СообщениеДобавлено: Пн Ноя 03, 2008 7:33 pm    Заголовок сообщения: Ответить с цитатой

wl писал(а):
есть какие-то успехи? просто я тоже заинтересовался этой темой, применительно к psp, но там всё должно быть похоже

И да и нет. Да, потому что в настоящее время пишу компилятор в байткод, грамматика для языка, с которого он будет компилировать, уже написана (LALR(1), пытаюсь сохранить совместимость как с Yacc, так и с Bison), следовательно с Бэкусом-Науром и рекурсией благополучно разобрался. Нет, потому что компилятор делается для совершенно другой визуальной новеллы, имеющей совершенно отличный от муновского байткод. Проект по переводу MOON. умер. Такое случается.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
wl



Зарегистрирован: 20.12.2005
Сообщения: 76
Откуда: Россия

СообщениеДобавлено: Чт Ноя 06, 2008 3:35 pm    Заголовок сообщения: Ответить с цитатой

moon мне не интересен. скорее новеллы от key - Clannad, Kanon, Shinkyouku Soukai Polyphonica, Snow Portable.
все их портировала некая контора Prototype. Форматы файлов отличаются от PC версий (в тех, которые есть, типа Clannad)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Гость






СообщениеДобавлено: Вс Ноя 09, 2008 3:50 am    Заголовок сообщения: Ответить с цитатой

wl писал(а):
moon мне не интересен. скорее новеллы от key - Clannad, Kanon, Shinkyouku Soukai Polyphonica, Snow Portable.
все их портировала некая контора Prototype. Форматы файлов отличаются от PC версий (в тех, которые есть, типа Clannad)

А мне интересен. Прежде всего тем, что не описывается формулой "crying game", выведенной Key в One, отшлифованной до блеска в Kanon и с тех пор без нещадно эксплуатирующейся самой Key и вагоном и маленькой тележкой других японских студий.

Кроме того, для Kanon и Clannad существует продвинутый инструментарий за авторством Haeleth и перевод этих игр уже идет полным ходом, так что ковырять PS2-версии смысла особого не вижу. Ну разве что из любви к искусству. Smile
Вернуться к началу
Gishi



Зарегистрирован: 13.04.2008
Сообщения: 6

СообщениеДобавлено: Ср Апр 08, 2009 12:15 am    Заголовок сообщения: Ответить с цитатой

Внезапно, бамп. Проект по переводу MOON. возродился:
http://www.tsukuru.info/tlwiki/index.php?title=MOON.

P.S. Загнулся он в свое время по причине того, что прежний переводчик умудрился потерять к нему интерес еще до того, как приступил к работе. Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Экстремальный ромхакинг Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group