构建一个通用解析器,用于在C#中将文本文件转换为数据结构

Pie*_*ten 8 .net parsing data-structures c#-3.0

我有一个SPAN文件的定义(http://www.cme-ch.com/span/spanl300.htm),我想用它构建一个解析器来解析字符串数据到内存集合类中(甚至使用yield关键字进行延迟评估.)

我见过的所有解析技术和库都适用于构造用于实现语言的解析树; 我只想知道解析数据结构的任何好技术,类似于在.net框架中将XML解析为XMLDocument,但使用SPAN定义的规则.

Ira*_*ter 2

SPAN 似乎是一堆记录类型,每个记录都有很多细节。

定义一个涵盖所有记录(作为非终结符)、任何子记录(作为非终结符)和代表 SPAN 定义的各种数据类型的终端数据类型的经典语法应该很简单。可能有很多非终结符,但这只是一个很大的语法,但不是一个复杂的语法。

大多数编程语言都有一小组通常可以出现在任何地方的终端标记。事实上,语法定义了对接下来出现的内容的期望(在 LR 解析器文献中称为“第一”和“后续”集),包括非常有限的终端集。SPAN 语法不会有什么不同;解析器的每个“解析状态”都意味着接下来出现的一组有限的终端,并且组织一个解析器来利用这一点。(我已经构建了 L(AL)R 解析器,并且可以轻松地使用“当前”状态来确定接下来可能发生的终端子集)。因此,SPAN 解析器可以确定每个状态中接下来可能出现的一小部分标记,并使用它来选择包含这些下一个标记的字符(它们必须形成不相交的集合!)。

实现这一点的一个简单方法是使用递归下降解析器。

所以我声称所有解析机制都可以很好地解析 SPAN,并且可能需要一些自定义工作来获取令牌。

传统解析器的解析操作会构建树,但填充数据结构的字段也同样容易。