我想创建简单的 xml 解析器使用野牛/弯曲。我不需要验证、评论、争论,只需要<tag>value</tag>
, where value可以是数字、字符串或其他<tag>value</tag>
.
例如:
<div>
<mul>
<num>20</num>
<add>
<num>1</num>
<num>5</num>
</add>
</mul>
<id>test</id>
</div>
如果有帮助,我知道可能出现的所有标签的名称。我知道给定标签可以容纳多少个子标签。是否有可能创建野牛解析器来执行类似的操作:
- new Tag("num", 1) // tag1
- new Tag("num", 5) // tag2
- new Tag("add", tag1, tag2) // tag3
- new Tag("num", 20) // tag4
- new Tag("mul", tag4, tag3)
...
- root = top_tag
标签及子标签数量:
- num: 1(唯一值)
- str: 1(唯一值)
- 添加|子|穆尔 | div: 2 (num | str | 标签, num | str | 标签)
你能帮我解决语法问题,以便能够像上面给出的那样创建 AST 吗?
对于你的要求,我认为亚克斯系统 https://github.com/Unidata/yax会很好用的。
来自自述文件:
yax 项目的目标是允许使用 YACC(实际上是 Gnu Bison)来解析/处理 XML 文档。
实现上述目标的关键软件是提供一个可以从 XML 文档生成 XML 词汇标记流的库。
可以包装该流以创建 yylex() 的实例,以将标记提供给 Bison 语法来解析和处理 XML 文档。
使用流加上 Bison 语法,至少可以进行以下类型的活动。
- 验证 XML 文档,
- 直接解析XML文档以创建内部数据结构,
- 构建 DOM 树。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)