Estoy intentando analizar comentarios de estilo lisp desde un lenguaje s-expression con FParsec. Obtuve un poco de ayuda con el análisis de comentarios de una sola línea en este hilo anterior - How to convert an FParsec parser to parse whitespaceCómo analizar comentarios con FParsec
Mientras eso se resolvió, todavía necesito analizar comentarios de líneas múltiples. Aquí está el código actual -
/// Read whitespace character as a string.
let spaceAsStr = anyOf whitespaceChars |>> fun chr -> string chr
/// Read a line comment.
let lineComment = pchar lineCommentChar >>. restOfLine true
/// Read a multiline comment.
/// TODO: make multiline comments nest.
let multilineComment =
between
(pstring openMultilineCommentStr)
(pstring closeMultilineCommentStr)
(charsTillString closeMultilineCommentStr true System.Int32.MaxValue)
/// Read whitespace text.
let whitespace =
lineComment <|>
multilineComment <|>
spaceAsStr
/// Skip any white space characters.
let skipWhitespace = skipMany whitespace
/// Skip at least one white space character.
let skipWhitespace1 = skipMany1 whitespace
Desafortunadamente, el análisis multilineComment nunca tiene éxito. Como este es un combinador, no puedo poner puntos de corte ni analizar por qué no funcionará.
¿Alguna idea de por qué no funciona?
Ah, maravilloso! Estaba distraído al pensar que sería un problema profundo del analizador subyacente, ¡pero resulta que era un booleano que especifiqué sin pensar! ¡Gracias! –
Ver la actualización. – Gustavo
¡Holy-moly que parece difícil! ¡Me alegro de haber preguntado! Trataré de asimilar eso hasta que pueda obtenerlo :) ¡Gracias de nuevo! –