Qual è il modo migliore per (efficacemente) analizzare i commenti multi-riga in stile C (ad esempio, /* ... */
) con i combinatori di parser Scala?Combinatori di Parser Scala: Parse in modo efficiente Commenti in stile C
In un progetto in cui sono coinvolto analizziamo un linguaggio di programmazione C-like e vogliamo supportare i commenti su più righe. Usiamo una sottoclasse di StandardTokenParsers
, che gestisce già tali osservazioni (via StdLexical
. Tuttavia, la classe funziona solo per abbastanza brevi commenti multi-linea, e si esaurisce lo spazio di stack altrimenti.
Abbiamo anche cercato propria che provvede definizione di spazi bianchi per rendere le cose più efficiente Abbiamo usato un RegexParser
(ispirato another question on StackOverflow) come segue:.
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]]
}
// ...
}
Questo ha migliorato un po 'la situazione, ma provoca comunque un overflow dello stack se il commento è più di qualche decina di righe. Qualche idea su come migliorare questo?