Я хочу создать парсер для C-подобного языка. Интересный аспект этого заключается в том, что я хочу создать его таким образом, чтобы тот, у кого есть доступ к источнику, мог легко модифицировать его, чтобы расширить язык (новый тип экземпляра экземпляра), причем расширения, которые могут быть настроены во время выполнения (они могут быть включен и выключен).Предложения о создании настраиваемого анализатора
Мое намерение - создать рекурсивный достойный парсер в качестве объекта. Каждое производство будет способом объекта. Метод расширения будет состоять в том, чтобы извлекать классы из этой базы, заменяя методы (и производственные определения) по мере необходимости. Я все еще пытаюсь понять, как смешивать и сопоставлять расширения. Одна из идей - играть в игры с v-tbl. Объекты будут построены с помощью v-tbl, который является копией базы, но с заменой методов на производные классы.
Помимо бит вертел характера решения единственные вопросы, я с ней
- разумный способ сделать v-TBL Mixup
- что делать, когда 2 удлинителя изменить то же самое (поскольку большинство замен будет вызвано тем, что оригинал имеет один вызов замены, другой будет работать, но механика настройки этого вопроса является проблемой)
- как разрешить расширение расширений (это может выглядеть как стандартное MI системы, но у меня никогда не было того, как они работают)
Другим решением (немного более мирской версией того же самого подхода) было бы использование статических переменных-членов для хранения указателей функций и вызова их для того же эффекта.
Редактировать: Я уже создал систему, которая позволяет мне создавать производные из определений BNF. Я могу изменить его, чтобы поддержать все, что я решаю.
Я (мучительно) знаю об ограничениях рекурсивного приличного (и вообще LL) :(Я пробовал ANTLR и никогда не работал правильно. Хотя он может быть полезен, мне, вероятно, придется изменить его внутренности для использования. – BCS 2008-10-24 21:00:35