Разбор S-выражений Lisp с известной схемой в C #

Я работаю с сервисом, который предоставляет данные в виде строки S-выражения, подобной Lisp. Эти данные поступают плотно и быстро, и я хочу пролистать их как можно быстрее, в идеале непосредственно в потоке байтов (это только однобайтовые символы) без какой-либо обратной обработки. Эти строки могут быть довольно длинными, и я не хочу, чтобы сборщик мусора выделил строку для всего сообщения.

Моя текущая реализация использует CoCo / R с грамматикой, но у нее есть несколько проблем. Из-за обратного отслеживания он назначает весь поток в строку. Кроме того, пользователям моего кода немного неудобно менять, если они должны. Я предпочел бы иметь чистое решение C #. CoCo / R также не допускает повторного использования объектов синтаксического анализатора / сканера, поэтому мне приходится заново создавать их для каждого сообщения.

Концептуально поток данных можно рассматривать как последовательность S-выражений:

(item 1 apple)(item 2 banana)(item 3 chainsaw)

Разбор этой последовательности создаст три объекта. Тип каждого объекта может быть определен по первому значению в списке, в вышеприведенном случае «элемент». Схема / грамматика входящего потока хорошо известна.

Прежде чем я начну кодировать, я хотел бы знать, есть ли библиотеки, которые уже делают это. Я уверен, что я не первый человек, который имеет эту проблему.

РЕДАКТИРОВАТЬ

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

Учитывая некоторые выражения, такие как:

(Hear 12.3 HelloWorld)
(HJ LAJ1 -0.42)
(FRP lf (pos 2.3 1.7 0.4))

Я хочу список объектов, эквивалентных этому:

{
    new HearPerceptorState(12.3, "HelloWorld"),
    new HingeJointState("LAJ1", -0.42),
    new ForceResistancePerceptorState("lf", new Polar(2.3, 1.7, 0.4))
}

Фактический набор данных, над которым я работаю,список перцепторов модели робота в футбольной лиге RoboCup 3D, Я, возможно, потенциально также должен десериализоватьдругой набор связанных данных с более сложной структурой.

Ответы на вопрос(6)

Ваш ответ на вопрос