Men PHP serialize() formati uchun ANTLR grammatikasini yozishga harakat qilyapman va satrlardan tashqari hamma narsa yaxshi ishlaydi. Muammo shundaki, ketma-ketlashtirilgan satrlar formati:
s:6:"length";
Regexlar nuqtai nazaridan, s:(\d+):".{\1}";
kabi qoida bu formatni tavsiflaydi, agar "mosliklar soni" sonida faqat qayta havolalarga ruxsat berilsa (lekin ular yo'q).
Lekin men buni lekser yoki parser grammatikasi uchun ifodalashning yo'lini topa olmayapman: butun g'oya o'qiladigan belgilar sonini Fortran Hollerith doimiylarida (ya'ni 6HLength
) o'qilishi kerak bo'lgan belgilar sonini tavsiflovchi ma'lumotnomaga bog'liq qilishdir. string chegaralovchida emas.
Fortran uchun ANTLR grammatikasi dan olingan ushbu misol yo'lni ko'rsatayotganga o'xshaydi, lekin Qanday qilib ko'rmayapman. E'tibor bering, mening maqsad tilim Python, ko'pchilik hujjat va misollar Java uchun:
// 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 */
;