Aynı gramerdeki geçerli tarihleri ve sayıları ayrıştırmanın en basit yolu (en kısa, en az kural ve uyarı yok) yolu nedir? Benim sorunum, geçerli bir ayı (1-12) eşleştirmek için bir lexer kuralının 1-12 arasındaki herhangi bir oluşumla eşleşmesidir.Antlr: Tarih ve sayıları tanımanın en kolay yolu?
number: (MONTH|INT);
ben gün ve yıl boyunca lexer kuralları eklediğinizde Sadece daha karmaşık bir hal alır: Sadece bir sayı eşleştirmek istiyorsanız Yani, böyle bir ayrıştırma kuralı gerekir. ay, gün & yıl ayrıştırma veya lexer kuralları ise
date: month '/' day ('/' year)? -> ^('DATE' year month day);
Ben sadece çok uzun zaman aynı ağaç yapısı ile bitirmek gibi umurumda değil: Böyle tarih için bir ayrıştırma kuralı istiyorum. Ayrıca, sorun size lexer ve/veya ayrıştırıcı sözdizimsel ve semantik hem denetimi gerçekleştirmek istediğiniz gibi görünüyor olmasıdır .:
foo: STRING OP number -> ^(OP STRING number);
STRING: ('a'..'z')+;
OP: ('<'|'>');