我正在使用Parsec库在Haskell中开发Pascal语言解析器,我需要重新定义Parsec.Token类中定义的一些令牌。
说出来,这是我的理由:
我需要更改stringLiteral
令牌的匹配方式。在默认定义中,它是between char '"'
(see this),但我需要between '\''
(撇号)。如何对Parsec行为进行此修改?
感谢!!!
答案 0 :(得分:3)
您正在讨论调整名为GenTokenParser
的数据类型的字段。看起来你正在使用一个自动填充合理默认值的数据类型的函数,你只想调整一件事,在这里你去:
myMakeTokenParser langDef =
let default = makeTokenParser langDef
in default { stringLiteral = newStringLit }
where
newStringLit = lexeme (
do{ str <- between (char '\'')
(char '\'' <?> "end of string")
(many stringChar)
; return (foldr (maybe id (:)) "" str)
}
<?> "literal string")