我正在使用 Parsec 库在 Haskell 中开发 Pascal 语言解析器,我需要重新定义 Parsec.Token 类中定义的一些标记。
说到它,这是我的情况:
我需要更改stringLiteral
令牌的匹配方式。在默认定义中,它是一些东西between char '"'
(见这个),但我需要它是between '\''
(撇号)。如何对 Parsec 行为进行此修改?
谢谢!!!
您正在谈论调整名为 的数据类型的字段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")