Нашёл две ошибки в библиотеках. Одну серьёзную (фактически, блок) и одну мелкую косметическую.
1. Модуль advr.t, функция parseNounPhrase.
if (objs!=[] and (wasadjafn || specifed)) return [(i+1)]+objs;
+1
в этом выражении, как оказалось лишнее, т.к. i
инкрементируется двумя строчками выше. Ошибка приводила к тому, что на фразу, скажем, "воткнуть булавку в подушечку" парсер отвечал "Я не понимаю это предложение".
2. Модуль errorru.t, функция parseError2.
if (p=inPrep) {p.sdesc;" ";i.vdesc;} else
p.sdesc;" ";
тут лишнее, т.к. уже выводилось на экран четырьмя строчками выше. Ошибка приводила к тому, что сообщение об ошибке выглядело как "Я не знаю как воткнуть булавку в в подушечку". Т.е. предлог дублировался.
Неактивен
Вылезла маленькая проблемка, которую пока не знаю как решить.
Я так понимаю, там всё дело в parseNounPhrase, которая неправильно распознаёт принадлежность слова тому или иному объекту. Надо будет как-нибудь посмотреть на неё.
Неактивен
Ещё одна гадкая ошибка.
"дать большой орех белке" - работает
"дать белке большой орех" - парсеру сносит крышу напрочь.
Как результат, в моей игре на КРИЛ нельзя будет использовать вторую форму, полностью корректную с т.з. русского языка.
Если только Андрей не разберется. Я что-то не смог. Андрей?
Неактивен
Спасибо огромное, Андрей! Чтоб я без тебя делал!
Я проверил, вроде нормально работает.
Скажи, а если я определяю предмет двумя существительными:
zmey: Actor location = startroom desc = 'Змей/муо Горыныч/муо' noun = 'дракон/мо' ... ;
то игра обламывается при попытке дать предмет Змею Горынычу
.
Я пока решил проблему тем, что сделал слово "Горыныч" прилагательным. Не уверен, что это правильно, но так, вроде, работает. Это вообще, как?
И еще. Если в определении существительного или прилагательного попадётся буква "ё", то это слово навсегда выпадает из поля зрения парсера. Т.е. не получится сделать desc = 'Ёжик/му'
- этого ёжика потом в игре не найти.
Отредактировано fireton (20.11.2009 11:27)
Неактивен
Супер! Спасибо, Андрей!
Неактивен
И какие планы? Какое решение ты предпочёл?
Мне кажется, надо усложнять.
Доточим RTADS до невиданных высот!
У меня в конкурсной игре эта ошибка, кстати, проявляется самым неприятным образом.
Выход для игрока, чтобы обойти проблему - использовать краткую форму.
Например:>положить орех
Куда вы хотите положить это?
>в корзину
Готово.
Но, конечно, это не дело. Надеюсь, всё будет исправлено и я выпущу послеконкурсную версию игры без этого гадкого бага.
Отредактировано fireton (24.11.2009 08:56)
Неактивен
Андрей, а ты в SVN библиотеку обновляешь?
Неактивен