我正在尝试学习如何使用Parsec
来编写Delphi解析器,但我很难定义LanguageDef。
在Delphi中,有两种类型的注释块,(* comments *)
和{ comments }
。
但评论的类型开始& LanguageDef的commentEnd是String,而不是[String],所以我只能放入一个或另一个。
所以,我尝试制作自己的whiteSpace解析器,但我不确定我是否真的可以将其传递给makeTokenParser
。
任何帮助都将不胜感激。
由于
John和Chris帮助我理解并解决了这个问题,但解决方案涉及替换makeTokenParser
提供的大量解析器,因此并不完全可取。
如果能找到更好的解决方案,我会再次发帖。
答案 0 :(得分:5)
我对Text.ParserCombinators.Parsec.Language
文件的解读是,无法使用LanguageDef
直接完成此操作。
我相信您正在编写自己的whiteSpace
解析器。为了成功使用它,您需要覆盖whiteSpace
生成的makeTokenParser
解析器。 TokenParser
创建的makeTokenParser
是一个记录,每个字段都包含一个解析器。我们可以创建一个新的记录副本,其中一个字段被替换如下:
-- ask GCHi for the type actual type signature constraints
-- Type sig is approx. fixWhiteSpace :: TokenParser -> Parser -> TokenParser
fixWhiteSpace originalTokenParser myWhiteSpaceParser =
originalTokenParser {whiteSpace = myWhiteSpaceParser}