Как создать синтаксический анализатор (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"
  • Директива [Получить объект]
  • Директива [Начало товаров]
  • Начало Объекта типа "Элемент"
  • Никто
  • Конец объекта
  • Начало Объекта типа "Элемент"
  • Никто
  • Конец объекта
  • Начало Объекта типа "Элемент"
  • Никто
  • Конец объекта
  • Конец члена
  • Конец объекта
  • Конец члена
  • Конец объекта

Вопрос: с чего начать?

Не могли бы вы предоставить мне несколько образцов / руководящих принципов? Спасибо!

0 ответов

Другие вопросы по тегам