如何使用Sprache构建(XAML)拉解析器?

时间:2015-04-19 21:38:39

标签: c# .net xaml parsing sprache

我已经在我的OmniXaml项目中创建了一个pull解析器。它读取XML文件并将其转换为可枚举的XAML节点。但我对结果不满意,所以我决定尝试以更优雅的方式建立另一个。

这就是我尝试使用Sprache生成解析器的原因。

问题是我甚至不知道如何开始。 XAML解析严重依赖于上下文,因此如果要生成一个Xaml节点,则可能需要先行处理并处理以下节点。 我目前使用XmlReader来读取XAML。

这里我列出了一些输入/输出示例,以便您了解我想要做的事情。输入是XAML代码,输出是XAML节点列表。 XAML节点是一种结构,其中我保存重新创建XAML中表示的对象所需的数据。它们就像CPU的指令。

示例1

输入(XAML):

<DummyClass xmlns="root" SampleProperty="Property!">  
</DummyClass>

输出(XAML节点列表)

  • 命名空间声明&#34; root&#34;带前缀:&#34;&#34;
  • DummyClass
  • 类型的对象的开始
  • 会员开始&#34; SampleProperty&#34;来自&#34; DummyClass&#34;
  • 价值节点:&#34;属性!&#34;
  • 会员结束
  • 对象结束

示例2

输入:

<DummyClass xmlns="root">
  <DummyClass.Child>
    <ChildClass></ChildClass>
  </DummyClass.Child>
</DummyClass>

输出:

  • 命名空间声明&#34; root&#34;带前缀:&#34;&#34;
  • DummyClass
  • 类型的对象的开始
  • 会员开始&#34;儿童&#34;来自&#34; DummyClass&#34;
  • 类型的开始&#34; ChildClass&#34;
  • 对象结束
  • 会员结束
  • 对象结束

示例3

输入:

  <DummyClass xmlns="root">
    <DummyClass.Items>
      <Item/>
      <Item/>
      <Item/>
    </DummyClass.Items>
  </DummyClass>

输出:

  • 命名空间声明&#34; root&#34;带前缀:&#34;&#34;
  • DummyClass
  • 类型的对象的开始
  • 会员“项目”来自“DummyClass”
  • 类型
  • [获取对象]指令
  • [项目开始]指令
  • 类型为“项目”的对象
  • 对象结束
  • 类型为“项目”的对象
  • 对象结束
  • 类型为“项目”的对象
  • 对象结束
  • 会员结束
  • 对象结束
  • 会员结束
  • 对象结束

问题: 如何从这开始?

你能提供一些样品/指南吗? 谢谢!

0 个答案:

没有答案