Parsing 重新定义;stringLiteral";Parsec.token中的token
我正在使用Parsec库在Haskell中开发Pascal语言解析器,需要重新定义Parsec.Token类中定义的一些令牌 说到这里,我的情况如下: 我需要更改Parsing 重新定义;stringLiteral";Parsec.token中的token,parsing,haskell,pascal,parsec,Parsing,Haskell,Pascal,Parsec,我正在使用Parsec库在Haskell中开发Pascal语言解析器,需要重新定义Parsec.Token类中定义的一些令牌 说到这里,我的情况如下: 我需要更改stringLiteral标记的匹配方式。在默认定义中,它是介于char''()之间的,但我需要它是介于'\'(撇号)之间的。如何修改Parsec行为 谢谢!!!您正在谈论调整名为GenTokenParser的数据类型的字段。看起来您正在使用一个函数,该函数会自动使用合理的默认值填充数据类型,您只需要调整一件事,现在开始: myMak
stringLiteral
标记的匹配方式。在默认定义中,它是介于char''()之间的,但我需要它是介于'\'
(撇号)之间的。如何修改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")
myMakeTokenParser langDef=
让default=makeTokenParser langDef
默认情况下{stringLiteral=newStringLit}
哪里
newStringLit=词素(
做{str您必须编写一个可选的stringLiteral
解析器。不幸的是,您不能像使用注释一样通过LanguageDef
对其进行自定义。我明白了,但是如何强制词法解析器使用可选的stringLiteral
解析器而不是默认的解析器?我遇到了以下错误:无法匹配exp在P.lexeme的第一个参数中,…
我使用importimport-qualified Text.Parsec.Token作为P
,因此有P.lexeme
对,我刚刚从Parsec复制并粘贴了词法器的一部分。您可以复制并粘贴一个很大的部分从链接模块中提取f代码,或者制作自己的字符串lexer并将其放在newStringLit的RHS上。