Question

J'implémente un analyseur qui traite les commentaires comme un espace blanc avec FParsec.Il semble que cela nécessite une conversion d'analyse triviale, mais je ne sais pas encore comment l'implémenter.

Voici le code que j'essaie d'obtenir pour la vérification de type -

let whitespaceTextChars = " \t\r\n"

/// Read whitespace characters.
let whitespaceText = many (anyOf whitespaceTextChars)

/// Read a line comment.
let lineComment = pchar lineCommentChar >>. restOfLine true

/// Skip any white space characters.
let skipWhitespace = skipMany (lineComment <|> whitespaceText)

/// Skip at least one white space character.
let skipWhitespace1 = skipMany1 (lineComment <|> whitespaceText)

L'erreur est sur le deuxième argument des deux opérateurs <|> (sur whitespaceText).Les erreurs sont -

Error   1   Type mismatch. Expecting a     Parser<string,'a>     but given a     Parser<char list,'a>     The type 'string' does not match the type 'char list'
Error   2   Type mismatch. Expecting a     Parser<string,'a>     but given a     Parser<char list,'a>     The type 'string' does not match the type 'char list'

Il semble que j'ai besoin de convertir un Parser<char list, 'a> en Parser<string, 'a>.Ou, puisque je ne fais que les sauter, je pourrais les convertir tous les deux en Parser<unit, 'a>.Cependant, je ne sais pas comment écrire ce code.Est-ce une simple expression lambda?

Bravo!

Était-ce utile?

La solution

let whitespaceText = manyChars (anyOf whitespaceTextChars)

ou

let whitespaceText = many (anyOf whitespaceTextChars) |>> fun cs -> System.String (Array.ofList cs)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top