Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 重新定义;stringLiteral";Parsec.token中的token_Parsing_Haskell_Pascal_Parsec - Fatal编程技术网

Parsing 重新定义;stringLiteral";Parsec.token中的token

Parsing 重新定义;stringLiteral";Parsec.token中的token,parsing,haskell,pascal,parsec,Parsing,Haskell,Pascal,Parsec,我正在使用Parsec库在Haskell中开发Pascal语言解析器,需要重新定义Parsec.Token类中定义的一些令牌 说到这里,我的情况如下: 我需要更改stringLiteral标记的匹配方式。在默认定义中,它是介于char''()之间的,但我需要它是介于'\'(撇号)之间的。如何修改Parsec行为 谢谢!!!您正在谈论调整名为GenTokenParser的数据类型的字段。看起来您正在使用一个函数,该函数会自动使用合理的默认值填充数据类型,您只需要调整一件事,现在开始: myMak

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

说到这里,我的情况如下:

我需要更改
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的第一个参数中,…
我使用import
import-qualified Text.Parsec.Token作为P
,因此有
P.lexeme
对,我刚刚从Parsec复制并粘贴了词法器的一部分。您可以复制并粘贴一个很大的部分从链接模块中提取f代码,或者制作自己的字符串lexer并将其放在newStringLit的RHS上。