在Parsec.Token中重新定义“stringLiteral”标记

时间:2012-02-25 21:48:41

标签: parsing haskell pascal parsec

我正在使用Parsec库在Haskell中开发Pascal语言解析器,我需要重新定义Parsec.Token类中定义的一些令牌。

说出来,这是我的理由:

我需要更改stringLiteral令牌的匹配方式。在默认定义中,它是between char '"'see this),但我需要between '\''(撇号)。如何对Parsec行为进行此修改?

感谢!!!

1 个答案:

答案 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")