我是Haskell的新手,我一直在尝试使用Parsec编写一个JSON解析器。这一直进展顺利,我能够用相对较少的代码解析列表和对象,这些代码也是可读的(很好!)。但是,对于JSON,我还需要解析原语,如
我希望在Parsec的一部分中找到可以将解析器用于类似这些内容的工具。我得到的最接近的是Parsec.Tokens模块(定义了integer和朋友),但是这些解析器需要一个“语言定义”,这似乎超出了我解析像JSON这样简单的东西所需要的范围--它似乎是为编程语言设计的。
所以我的问题是:
我注意到在这个网站上有一个问题说Megaparsec包含了这些原语1,但我认为这些元素不能与parsec一起使用。
相关问题:
发布于 2017-03-04 18:33:10
在这里,Parsec.Token中的函数是正确的吗?
是的,他们是。如果您不关心语言定义指定的细节 (即您不打算使用依赖于它们的解析器,例如reserved),只需使用emptyDef作为默认值:
import Text.Parsec
import qualified Text.Parsec.Token as P
import Text.Parsec.Language (emptyDef)
lexer = P.makeTokenParser emptyDef
integer = P.integer lexer正如您所注意到的,对于您的用例来说,这是不必要的。值得一提的是超级私人股本公司(参见。( 亚历克的建议)提供相应的integer解析器,而不需要仪式。(另一方面,兆位秒并不试图烘焙支持例如保留的单词,而是在你实际需要的情况下使用不难实现。)
https://stackoverflow.com/questions/42598845
复制相似问题