gpt4 book ai didi

delphi - 如何在 Parsec 中定义多种类型的注释 block

转载 作者:行者123 更新时间:2023-12-03 14:39:05 25 4
gpt4 key购买 nike

我正在尝试学习如何使用 Parsec 编写 Delphi 解析器,但我在定义 LanguageDef 时陷入困境。

在Delphi中,有两种类型的注释 block ,(* comments *){comments }。但是LanguageDef的commentStart和commentEnd的类型都是String,而不是[String],所以我只能输入其中之一。

因此,我尝试制作自己的空白解析器,但我不确定是否真的可以将其传递到 makeTokenParser 中。

如有任何帮助,我们将不胜感激。

谢谢

<小时/>

John 和 Chris 帮助我理解并解决了这个问题,但解决方案涉及替换 makeTokenParser 提供的大量解析器,因此这并不完全可取。

如果我能找到更好的解决方案,我会再次发布。

最佳答案

我对 Text.ParserCombinators.Parsec.Language 文件的解读是,这不能直接使用 LanguageDef 来完成。

我相信您编写自己的 whiteSpace 解析器的方向是正确的。为了成功使用它,您需要覆盖由 makeTokenParser 生成的 whiteSpace 解析器。由 makeTokenParser 创建的 TokenParser 是一个记录,每个字段都包含一个解析器。我们可以创建记录的新副本,并替换其中一个字段,如下所示:

-- ask GCHi for the type actual type signature constraints
-- Type sig is approx. fixWhiteSpace :: TokenParser -> Parser -> TokenParser
fixWhiteSpace originalTokenParser myWhiteSpaceParser =
originalTokenParser {whiteSpace = myWhiteSpaceParser}

关于delphi - 如何在 Parsec 中定义多种类型的注释 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8384292/

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