1

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

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

问题是我什至不知道如何开始。XAML 解析在很大程度上依赖于上下文,因此如果要生成一个 Xaml 节点,则可能必须先行查看并处理以下节点。我目前使用 XmlReader 来读取 XAML。

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

例 1

输入(XAML):

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

输出(XAML 节点列表)

  • “root”的命名空间声明,前缀为:“”
  • DummyClass 类型的对象的开始
  • 从类型“DummyClass”开始成员“SampleProperty”
  • 价值节点: “财产!”
  • 会员结束
  • 没有任何
  • 对象结束

例 2

输入:

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

输出:

  • “root”的命名空间声明,前缀为:“”
  • DummyClass 类型的对象的开始
  • 没有任何
  • 从类型“DummyClass”开始成员“Child”
  • “ChildClass”类型的对象的开始
  • 没有任何
  • 对象结束
  • 会员结束
  • 对象结束

例 3

输入:

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

输出:

  • “root”的命名空间声明,前缀为:“”
  • DummyClass 类型的对象的开始
  • 没有任何
  • 从“DummyClass”类型开始的成员“项目”</li>
  • [获取对象] 指令
  • [项目开始] 指令
  • “项目”类型的对象的开始</li>
  • 没有任何
  • 对象结束
  • “项目”类型的对象的开始</li>
  • 没有任何
  • 对象结束
  • “项目”类型的对象的开始</li>
  • 没有任何
  • 对象结束
  • 会员结束
  • 对象结束
  • 会员结束
  • 对象结束

问题:如何从这个开始?

你能给我提供一些样本/指南吗?谢谢!

4

0 回答 0