gpt4 book ai didi

java - 解析器和状态机有什么区别?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:29 25 4
gpt4 key购买 nike

我想写一些解析电子邮件的代码,结构如下:

Message-ID: <2252971.1075852681795>
Date: Tue, 31 Jul 2001 05:56:08 -0700 (EST)
From: joebloggs@mail.net
To: jane@othermail.com, john@somemail.net
Subject: A subject goes here
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
X-From: Joe <joebloggs@mail.net>
X-To: Jane <jane@othermail.com>, John, Smith <john@somemail.net>
X-cc:
X-bcc:
X-Folder: \joebloggs\Inbox
X-Origin: Bloggs-J
X-FileName: joebloggs.pst

Hi, this is the information you were looking for...
Sincerely,
Joe

我想编写一些代码将其解析为(例如)内存中的类,然后我可以选择以某种 CSV 格式将其写入磁盘。请注意,(例如)To: 字段可以是多行的。

我想知道的是,我在这里看到的是什么类型的问题?这是编写自定义解析器(并生成某种 DSL)有用的示例,还是我最好将其建模为具有大外循环、一些状态和一些逐行解析输入的函数的状态机, 取决于当前状态是什么?

我可以使用的语言包括 Scala 或 Java..

最佳答案

A parser是一个软件组件,它接受输入数据(通常是文本)并构建数据结构。

解析器 并不总是状态机,但状态机 是实现解析器的一种可能方式。

关于你问题的第二部分。

scala 和 java 有多个解析器库。最受欢迎的是 Parboiledscala parser combinators (我个人更喜欢)。

您也可以使用 regular expressions ,这通常可以更快地实现并且更容易解析一些简单的东西(顺便说一句,正则表达式在内部是 FSM)。

对于您的情况,我可能只使用正则表达式。输入的结构看起来非常简单,所以只需将其分成几个部分,然后分别解析每个部分。

关于java - 解析器和状态机有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35739336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com