2016-04-07 27 views
0

ANTLR4 için oluşturduğum UCB Logo dilbilgisinin notasyonuyla ilgili bir sorum var. Bazı gösterimler ortaya çıkıp sormayı düşünemez. Eğer kimse açıklığa kavuşmak istiyorsa, minnettar olacağım. İşte Oldukça anlamıyorum gösterimler şunlardır:Bu ANLTR4 gösterimi ne anlama geliyor?

WORD 
: {listDepth > 0}? ~[ \t\r\n\[\];] (~[ \t\r\n\];~] | LINE_CONTINUATION | '\\' ([ \t\[\]();~] | LINE_BREAK))* 
| {arrayDepth > 0}? ~[ \t\r\n{};] (~[ \t\r\n};~] | LINE_CONTINUATION | '\\' ([ \t{}();~] | LINE_BREAK))*; 

array 
: '{' (~('{' | '}') | array)* '}'; 

NAME 
: ~[-+*/=<> \t\r\n\[\]()":{}] (~[-+*/=<> \t\r\n\[\](){}] | LINE_CONTINUATION | '\\' [-+*/=<> \t\r\n\[\]();~{}])*; 

Ben dizi onunla başlamak anlamına gelir {ve seviyeleri isteğe bağlı sayıda var, ama ile sonlandığı için} sanırım. Diğerlerinin normal ifadeler olduğunu mu söylüyorsun? Çok bilgim, regex farklı programlama dilleri için farklıdır.

Bunu doğru mu yaptım?

cevap

1

Antlr düzenli ifadeler yapmaz. Aynı operatörlerin bazılarını uygular, ancak benzerlik büyük ölçüde sona erer.

WORD kuralı içindeki ilk alt terimler ({listDepth > 0}?), normal ifade dünyasındaki hiçbir şeyle ilişkili değildir. Bunlar, Antlr belgelerinde tanımlanmış ve TDAR'da ayrıntılı olarak açıklanmıştır.

array kuralı hakkındaki anlayışınız büyük ölçüde doğrudur.