Il problema è che i commenti ricorsivi ti costringono a analizzare la sezione dei commenti, spingendola al di fuori dell'ambito di un lexer normale e probabilmente introducendo più problemi.
Come aggiornamento: un compilatore di solito ha un numero di fasi distinte con lavori diversi, ei primi sono i lexer, che ottiene il programma di input e lo separa in una sequenza di token (ognuno dei quali contiene una parola chiave, e identificatore o operatore) e il parser, che struttura questa sequenza di token in un albero di sintassi astratto (AST).
Per quanto riguarda l'ambito di un lexer, ricorda che il lexing può normalmente essere fatto da espressioni regolari. Strutture simili a quelle di un ripetitore come i commenti ricorsivi non possono essere analizzate con espressioni regolari (vedi grammatiche senza contesto), quindi il lexer dovrebbe avere molta più complessità, ad es. avrebbe bisogno di essere implementato tramite un parser ricorsivo-discendente.
Inoltre, per C e linguaggi simili (che hanno usato la sintassi / ** / dei commenti più famosi) non è mai emersa la necessità di commentare grandi blocchi di codice, poiché avevano il pre-processore e blocchi di codice inutilizzati appena avvolti da
#if 0
....
#endif
che eludeva il problema di analisi delegando il problema a un secondo compilatore molto più semplice (il pre-processore).
Riassumere: poiché i commenti ricorsivi renderebbero la compilazione più complicata, di solito non sono consentiti e solo le lingue con commenti in stile C, ma senza un preprocessore, ne hanno davvero bisogno. Che Java sia tra loro è sfortunato, naturalmente.
Modifica: questo non significa che i commenti ricorsivi sarebbero impossibili o addirittura molto difficili da fare. Potresti usare un lexer ricorsivo-discendente o avere un preprocessore prima del lexer per filtrare i commenti. Tuttavia, entrambi gli approcci hanno un costo considerevole rispetto al modello standard (usa RE per auto-compilare il lexer e un EBNF per auto-compilare il parser), e il guadagno è piuttosto piccolo.