Как создать синтаксический анализатор (XAML) с помощью Sprache?
Я создал pull-парсер как часть моего проекта OmniXaml. Он читает файл XML и преобразует его в перечисляемый узел XAML. Но я не доволен результатом, поэтому решил попробовать построить еще один более элегантный способ.
Вот почему я попытался сделать парсер с помощью Sprache.
Дело в том, что я даже не знаю с чего начать. Синтаксический анализ XAML в значительной степени зависит от контекста, поэтому, если вы хотите получить один узел Xaml, вам, возможно, придется заглянуть в будущее и обработать следующие узлы. В настоящее время я использую XmlReader для чтения XAML.
Здесь я перечисляю некоторые ПРИМЕРЫ входов / выходов, чтобы вы могли понять, что я хочу сделать. Входными данными является код XAML, а выходными данными является список узлов XAML. Узлы XAML - это структура, в которой хранятся данные, необходимые для воссоздания объектов, представленных в XAML. Они как инструкции процессора.
Пример 1
Вход (XAML):
<DummyClass xmlns="root" SampleProperty="Property!">
</DummyClass>
Вывод (список узлов XAML)
- Объявление пространства имен "root" с префиксом: ""
- Запуск объекта типа DummyClass
- Начало члена "SampleProperty" из типа "DummyClass"
- Значение узла: "Недвижимость!"
- Конец члена
- Никто
- Конец объекта
Пример 2
Входные данные:
<DummyClass xmlns="root">
<DummyClass.Child>
<ChildClass></ChildClass>
</DummyClass.Child>
</DummyClass>
Выход:
- Объявление пространства имен "root" с префиксом: ""
- Запуск объекта типа DummyClass
- Никто
- Старт члена "Child" из типа "DummyClass"
- Начало Объекта типа "ChildClass"
- Никто
- Конец объекта
- Конец члена
- Конец объекта
Пример 3
Входные данные:
<DummyClass xmlns="root">
<DummyClass.Items>
<Item/>
<Item/>
<Item/>
</DummyClass.Items>
</DummyClass>
Выход:
- Объявление пространства имен "root" с префиксом: ""
- Запуск объекта типа DummyClass
- Никто
- Начало члена "Предметы" из типа "DummyClass"
- Директива [Получить объект]
- Директива [Начало товаров]
- Начало Объекта типа "Элемент"
- Никто
- Конец объекта
- Начало Объекта типа "Элемент"
- Никто
- Конец объекта
- Начало Объекта типа "Элемент"
- Никто
- Конец объекта
- Конец члена
- Конец объекта
- Конец члена
- Конец объекта
Вопрос: с чего начать?
Не могли бы вы предоставить мне несколько образцов / руководящих принципов? Спасибо!