1

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

说到它,这是我的情况:

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

谢谢!!!

4

1 回答 1

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")
于 2012-02-25T22:03:32.717 回答