Próbuję parsować komentarze w stylu lisp z języka s-expression za pomocą FParsec. Mam trochę pomocy z analizowaniem komentarzy jednoliniowych w poprzednim wątku - How to convert an FParsec parser to parse whitespaceJak analizować komentarze za pomocą FParsec
Podczas gdy to zostało rozwiązane, nadal muszę analizować komentarze wielowierszowe. Oto aktualny kod -
/// 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
Niestety, analiza multiliniiComment nigdy się nie powiedzie. Ponieważ jest to kombinator, nie mogę podać punktów przerwania ani przeanalizować, dlaczego nie zadziała.
Jakieś pomysły, dlaczego to nie zadziała?
Ach, cudowne! Byłem rozproszony, myśląc, że to będzie jakiś głęboki problem leżący u podstaw parsera, ale okazuje się, że był to boolean, który określiłem bezmyślnie! Dziękuję Ci! –
Zobacz aktualizację. – Gustavo
Holy-moly, który wygląda na trudny! Cieszę się, że zapytałem! Będę starał się to pogrzebać, dopóki nie będę mógł go zdobyć :) Jeszcze raz dziękuję! –