Здравствуйте, иферы, или как там правильно!
Собрался написать игру и наиболее сложным для себя считаю написание анализатора команд. Не подскажите ли, где можно найти литературу по теории написания таких анализаторов; что в данной области существует на русском языке и вообще с чего начинать? Или русских анализаторов нету и все первооткрыватели?
Как создать словарь и как его связать с анализатором? Ну это сразу такой конкретный вопрос...
Спасибо!filden@hot.ee
Неактивен
Если это вызывает такой интерес, то могу попробовать подготовить материал о том, как я у себя его реализовал.
Что касается тем, где это затрагивалось, то это:
http://www.taplap.ru/cgi-bin/yabb/yabb. … =995175153
и
http://www.taplap.ru/cgi-bin/yabb/yabb. … =993509091
Неактивен
По-моему, основная сложность кроется в приведении предложения в порядок с точки зрения компьютера, т.е. чтобы ему было понятно, где глагол (это самое легкое), а где основные и вспомогательные объекты.
У меня после подобного разбора определяется, основное предназначение глагола (манипуляции с предметами, передвижение и т.п.) и передается в зависимости от этого в следующую процедуру, где происходят уже сами действия, и где текст выглядит уже примерно следующим образом:
if N1='лопата' then
if verb='ударить' then
if N2='кролик' then RabbitMustDie();
elseif N2='лошадь' then HorseMustDie()
else if verb='копать' then print('Зачем? Лучше убьем ею кролика или лошадь!')
endif;
Фразы типа: "ударить лопатой кролика", "ударить кролика лопатой", "побить лопатой кролика", будут приводить к этому блоку.
Вот...
Неактивен
Само собой...
Неактивен
Нужно учитывать оба варианта. В некоторых ситуациях игрок может опускать название объекта. В этом случае необходимо, отталкиваясь от глагола, смотреть в какой ситуации этот глагол был произнесен.
P.S. Но все это реализуемо только тогда, когда анализатор выдал правильно разобранную на составляющие команду. То есть приходим к тому, с чего начали. К анализатору.
Неактивен
Что ж все так помешались на написании платформ? Начните с написания игры - и поймете, что и как нужно будет реализовывать в платформе. В противном случае - куда большие затраты времени на разработку, отладку и т.п.
Я вот, например, пишу игру на Паскале. Данные же для игры (локации, предметы, текстовые данные) подготавливаю в некой визуальной среде. Однако, чтобы избежать рутины, постепенно переношу некоторые куски кода в сами данные. Например, у меня описание локации может меняться в зависимости от значения переменной. Можно это, конечно, прописать и в Паскале, но это громоздко и пришлось бы делать это для каждой локации. Поэтому эти условия у меня вынесены в блок данных. То есть, паскалевская программа когда нужно вывести описание локации смотрит, а нет ли условий. Если есть, то в зависимости от того, какое из них выполняется, выводится то или иное описание.
Таким образом можно постепенно перетащить много чего, и получится платформа. Но к этому времени я уже точно буду знать, что и как нужно реализовывать, чтобы эта самая платформа отвечала моим желаниям.
Неактивен