Я не слишком тщательно изучил ваш код, но вот мое впечатление:
Ваш анализатор проверяет, что первая группа символов, которую он видит, образует правильную формулу, а затем останавливается. Если после этого появляется мусор, это не имеет значения, ваш парсер все еще счастлив, потому что нашел правильную формулу.
Я вижу два способа справиться с этим в вашей грамматике:
Требовать, чтобы формула заканчивалась каким-то метасимволом «конец потока»
<document> ::= <formula> |
<formula> <document>
(Конечно, это левая рекурсия, но вы сможете решить ее без особых проблем.)
Также:
} else if (proposition(sym)) {
nextSym();
}
Мне кажется подозрительным, что эта ветка ничего не возвращает.
Не движок как таковой, но Valil.Chess - хорошая шахматная игра .NET (с доступным исходным кодом - так что вы можете добраться до «движка» игры) которая выиграла ноябрьскую премию за подачу заявок в Code Project.
Существует также SharpChess , который также является полной шахматной игрой, написанной на C #.
Что касается общих шахматных движков, которые могут быть конвертированы в .NET, их много, и в зависимости от задача, вы можете выбрать из множества двигателей для реализации в .NET. Хорошим списком отправной точки является здесь , а также показан рейтинг Elo каждого двигателя. Даже повторная реализация серверной части FICS , безусловно, представляет собой проблему! :)
Хорошим списком отправной точки является здесь , а также показан рейтинг Elo каждого двигателя. Даже повторная реализация серверной части FICS , безусловно, представляет собой проблему! :) Хорошим списком отправной точки является здесь , а также показан рейтинг Elo каждого двигателя. Даже повторная реализация серверной части FICS , безусловно, представляет собой проблему! :)Я пишу «Компьютерный шахматный блог», в котором рассказывается обо всех этапах написания шахматного движка на C # с нуля, он включает в себя раздел ссылок на компьютерные шахматы и стартовый набор для игры в шахматы.
Адам Берент
Я также рекомендую SharpChess в качестве отправной точки для .Net. Когда я разрабатывал свои двигатели (в VB, Delphi, C #), я постоянно ссылался на Crafty профессора доктора Роберта Хаятта. (Глядя на прогрессивные версии Crafty - это восхищение.)