我正在嘗試爲PHP serialize()格式編寫ANTLR語法,並且除了字符串以外,一切似乎都正常工作。問題是,序列化字符串格式爲:ANTLR規則消耗固定數量的字符
s:6:"length";
在正則表達式上來講,像s:(\d+):".{\1}";
規則會形容這種格式,如果只有反向引用是在伯爵「比賽的數」允許(但他們都沒有) 。
但是我無法找到一種方法來表達這個詞法分析器或語法分析器的語法:整個想法是使讀取的字符數量取決於描述要讀取的字符數的反向引用,如Fortran Hollerith常量(即6HLength
),而不是字符串分隔符。
從ANTLR grammar for Fortran這個例子似乎指向的方式,但我不知道如何。請注意,我的目標語言是Python,而大部分的文檔和示例都是針對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 */
;