gpt4 book ai didi

parsing - 使用 Haskell Parsec 自定义 whiteSpace

转载 作者:行者123 更新时间:2023-12-04 14:52:37 25 4
gpt4 key购买 nike

我想使用 Parsec 的 makeTokenParser构建我的解析器,但我想使用我自己的 whiteSpace 定义.执行以下操作将替换 whiteSpace根据我的定义,但所有 lexeme解析器仍然使用旧定义(例如 P.identifier lexer 将使用旧空白)。

...
lexer :: P.TokenParser ()
lexer = l { P.whiteSpace = myWhiteSpace }
where l = P.makeTokenParser myLanguageDef
...

查看 makeTokenParser 的代码我想我明白为什么它会这样工作。我想知道是否有任何解决方法可以避免完全复制 makeTokenParser 的代码?

最佳答案

可悲的是,我认为没有办法。 makeTokenParser 中使用的本地定义递归地引用自己,因此,正如您所指出的,lexeme使用 whiteSpace定义在那里,而不是 whiteSpace记录您在 lexer 中替换的成员目的。

这段代码很讽刺,因为它使用了与 makeTokenParser 中的两个本地函数相同的名称。并作为 TokenParser 的记录成员构造函数。它们实际上是完全不同的实体。

关于parsing - 使用 Haskell Parsec 自定义 whiteSpace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2641737/

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