首页 > 解决方案 > 在执行时定义数据类型?

问题描述

我正在编写一个 PLY 文件解析器和序列化库,作为点云压缩研究项目的一部分。PLY 文件在包含所有数据的有效负载部分之前的标头中指定数据格式。数据通过elements包含来描述properties。例如:

element vertex 12 
property float x 
property float y 
property float z

通知负载将有一个包含 12 个元素的列表,称为“顶点”,具有三个浮点属性,称为 x、y 和 z,它们都是浮点数。对于任意文件,我事先不知道它包含哪些元素,也不知道每个文件的名称、类型或属性数量。我通过解析标题来创建元素列表来解决这个问题

data Element = Element Name Qty [Property]
data Property = Property PropType Name

它告诉我有效负载的整体结构以及一些功能来搜索给定元素是否存在并定位/解析有效负载部分中的数据。

我有一个工作版本,但我正在考虑一种新的可能性(现在只是为了好玩)。如果我想构建一个表示类型级别数据的数据结构怎么办?就像是

data Vertex = Vertex { elX :: Float
                     , elY :: Float
                     , elY :: Float }

但是通过详细信息,我只能发现我的数据类型(或在文件中描述了多种元素的情况下的类型)在解析文件头后的执行时间内将具有哪些字段(属性),以便我以后可以构建一个函数parseVertex :: Parser [Vertex]然后获取有效负载数据并解析它?

有人可以给我一些关于如何开始寻找解决此类问题的建议吗?

标签: parsinghaskelltypes

解决方案


推荐阅读