Sto provando a scrivere una grammatica ANTLR per il formato serialize() di PHP e tutto sembra funzionare correttamente, tranne che per le stringhe. Il problema è che il formato delle stringhe serializzati è:Regola ANTLR per consumare un numero fisso di caratteri
s:6:"length";
In termini di regex una regola come s:(\d+):".{\1}";
sarebbe descrivere questo formato se solo backreferences sono stati ammessi nel "numero di partite" count (ma non lo sono) .
Ma non riesco a trovare un modo per esprimere questo per una grammatica lesser o parser: l'intera idea è di fare in modo che il numero di caratteri letti dipenda da un backreference che descrive il numero di caratteri da leggere, come nelle costanti di Fortran Hollerith (cioè), non su un delimitatore di stringa.
Questo esempio dallo ANTLR grammar for Fortran sembra indicare la strada, ma non vedo come. Si noti che la mia lingua di destinazione è Python, mentre la maggior parte del documento e gli esempi sono per Java:
// numeral literal
ICON {int counter=0;} :
/* other alternatives */
// hollerith
'h' ({counter>0}? NOTNL {counter--;})* {counter==0}?
{
$setType(HOLLERITH);
String str = $getText;
str = str.replaceFirst("([0-9])+h", "");
$setText(str);
}
/* more alternatives */
;