Jaki jest najlepszy sposób (wydajnego) analizowania wielowierszowych komentarzy w stylu C (tj. /* ... */
) za pomocą kombinatorów parsera Scala?Kombinatory analizatora składni Scala: wydajnie analizować komentarze w stylu C
W projekcie, w którym uczestniczę, analizujemy język programowania w stylu C i chcemy obsługiwać komentarze wielowierszowe. Używamy podklasę StandardTokenParsers
, który już obsługuje takie uwagi (przez StdLexical
. Jednak klasa działa tylko na dość krótkich uwag multi-line, a zabraknie miejsca stosu inaczej.
Mamy również próbował zapewniając naszą własną definicję od spacji aby uczynić to bardziej wydajny Użyliśmy RegexParser
(inspirowany another question on StackOverflow) w następujący sposób:.
class Parser extends StandardTokenParsers {
override val lexical = new StdLexical {
def rp: RegexParsers = new RegexParsers {}
override val whitespace: Parser[Any] = rp.regex("""(\s|//.*|(?m)/\*(\*(?!/)|[^*])*\*/)*""".r).asInstanceOf[Parser[Any]]
}
// ...
}
to poprawiło sytuację nieco, ale nadal powoduje przepełnienie stosu, jeśli komentarz jest więcej niż kilkudziesięciu linii. Wszelkie pomysły, jak to poprawić?