Sto tentando di analizzare commenti in stile Lisp da un linguaggio di espressione S con FParsec. Ho avuto un po 'di aiuto con l'analisi dei commenti a riga singola in questo thread precedente - How to convert an FParsec parser to parse whitespaceCome analizzare i commenti con FParsec
Mentre ciò è stato risolto, devo ancora analizzare i commenti multilinea. Ecco il codice corrente -
/// 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
Sfortunatamente, il parsing multilineComment non ha mai esito positivo. Poiché si tratta di un combinatore, non posso inserire punti di interruzione o analizzare perché non funzionerà.
Qualche idea sul perché non funziona?
Ah, meraviglioso! Sono stato distratto pensando che sarebbe stato un problema di parser profondo, ma si è scoperto che era un booleano che ho specificato senza pensieri! Grazie! –
Vedere l'aggiornamento. – Gustavo
Holy-moly che sembra difficile! Sono contento di averlo chiesto! Cercherò di farlo finché non riuscirò a ottenerlo :) Grazie ancora! –