2009-04-20 20 views
5

/(foo|foobar|foobaz)/ gibi bir dönüşüm verildiğinde Perl 6, hangisinin hangisi daha önce kullanılacağına dair herhangi bir vaatte bulunur ve eğer belgede bu sözleri yaparsa, söz verir mi?Perl 6, sipariş değişimleri hakkında herhangi bir vaatte bulunuyor mu?

İlgili soruya bakın Does Perl currently (5.8 and 5.10) make any promises about the order alternations will be used?.

+3

Perl 6'nun çok fazla söz verdiğini bana vuruyor. Larry bize gerçek bir yayınlanma tarihi verene kadar, bunlardan hiçbirine inanmayacağım :-) – bedwyr

+0

Heh, kuralların çoğunlukla yapıldığı görülüyor ve bu noktada herhangi bir değişiklik beklemiyorum. Yani, eğer değişirse, buradaki cevap da değişebilir. –

cevap

10

S05 Bu amaçla

diyor, Perl 6'da her regex faaliyetlerden ötürü onun "saf" kalıplarını ayırt edileceğini ve geçişli belirteci dahil (ilk belirteç kalıplarının listesini iade edebilmek için gereklidir Bu düzenli ifadenin "saf" kısmı tarafından çağrılan herhangi bir alt-yapının kalıpları, ancak herhangi bir alt-yapıyı bir kereden fazla içermeyen, geleneksel normal ifadelerde izin verilmeyen öz referansı içereceği için). Kullanarak mantıksal bir dönüşüm | Daha sonra bu listelerin iki veya daha fazlasını alır ve en uzun belirteç önekine uyan alternatife gönderir. Bu, sözel olarak sözcük olarak gelen alternatif olabilir veya olmayabilir. Bununla birlikte, iki alternatif aynı uzunlukta eşleşiyorsa, bağ ilk önce özgüllükle kırılır. En uzun sabit dize ile başlayan alternatif kazanır; Yani, tam bir eşleşme, karakter sınıfları kullanılarak yapılan bir eşleşmeden daha yakın olarak sayılır. Bu işe yaramazsa, kravat iki yöntemden biriyle kırılmış. Alternatifler farklı gramerlerde ise, standart MRO (yöntem çözünürlük sırası) hangisinin ilk denemesini belirler. Alternatifler aynı dilbilgisel dosyadaysa, metinsel olarak önceki alternatifler öncelik kazanır. (Bir gramer kuralları birden fazla dosyada tanımlanmış ise, sırası tanımlanmamıştır ve yanlış bir birinci çalışıldığı zaman, açıkça onaylama işlemi hatası zorlamak için kullanılmalıdır.)

Bu çok farklı gibi görünüyor Perl 5'te yapılandan söz.

13

Sadece birkaç kelimeyi belirtmek gerekirse: alternatifler paralel olarak eşleştirilmeli (en azından bazen) ve en uzun eşleşme kazanır. Sıralı alternatifler istiyorsanız, tıpkı | gibi soldan sağa bir sipariş veren çift çubuk || Perl 5 regexes içinde yapar.