Parsing 解析器的使用有意义吗?

Parsing 解析器的使用有意义吗?,parsing,haskell,functional-programming,Parsing,Haskell,Functional Programming,我有以下文本,并希望转换为数据结构 案文如下: pcp-action:MESSAGE\npcp-channel:apc\:///\npcp-body-type:text\nPUBLIC:THISPK\nTOPIC:SEND\n\nHello Foo 我想知道,为它使用解析器是否有意义。老实说,我看不出在这种情况下使用解析器有什么意义,因为它的结构不是BNF格式的,比如JSON,而且它不是递归枚举的 什么时候使用解析器将文本转换为数据结构才有意义 更新 我忘了提到上面的文字是基于下面的描述,即

我有以下文本,并希望转换为数据结构

案文如下:

pcp-action:MESSAGE\npcp-channel:apc\:///\npcp-body-type:text\nPUBLIC:THISPK\nTOPIC:SEND\n\nHello Foo 
我想知道,为它使用解析器是否有意义。老实说,我看不出在这种情况下使用解析器有什么意义,因为它的结构不是BNF格式的,比如JSON,而且它不是递归枚举的

什么时候使用解析器将文本转换为数据结构才有意义

更新

我忘了提到上面的文字是基于下面的描述,即写在这里


看起来,它是基于语法的。

与任何工具一样,您应该在适合该工作的时候使用解析器。将字符串转换为数据结构正是解析器的用途


这种特定的语言是由BNF定义的,因此也是递归枚举的,事实上,它与上下文无关,因此是解析的理想候选语言,但是您可以将解析器用于各种事情。例如,日志文件可能没有定义的BNF语法,但在实践中通常结构良好,足以进行有用的解析。

为什么您认为解析器应该只用于递归枚举的BNF语法?这是一个字符串,而不是一种语言;可递归枚举的属性不进行类型检查。如果您只有一个字符串,那么您可以从该字符串生成一个值,该值包含您需要的内容。如果您有一个字符串集合,那么您必须更好地描述它,而不仅仅是集合中的一个元素。我不知道是什么让你认为这样的集合显然是不可递归枚举的。这个结果会让我有点吃惊。协议正在描述。是的,它是一种语法。然后它由BNF语法定义,并且是递归枚举的,我对你的问题更加困惑。@zero_编码它就在你链接的页面上:推送通道协议PCP消息可以使用Backus Naur表单语法更正式地描述。图1显示了PCP消息的结构。当然,将语法作为GIF图像而不是文本发布是一种可怕的做法。