SORU
25 EYLÜL 2008, PERŞEMBE


Düzenli ifadeler, iç içe geçmiş desen eşleşmesi için kullanılabilir mi?

Kat sayısı bilinmeyen oluşan iç içe geçmiş bir desen eşleşen bir düzenli ifade yazmak mümkün. Örneğin, normal ifade bir açılış maçı ve kapanış, açık kapanış parantez dış parantez içinde iç içe bilinmeyen sayıda olduğunda durun.

Örneğin:

public MyMethod()
{
  if (test)
  {
    // More { }
  }

  // More { }
} // End

Maç:

{
  if (test)
  {
    // More { }
  }

  // More { }
}

CEVAP
25 EYLÜL 2008, PERŞEMBE


Hayır. O kadar kolay değil. Bir sonlu otomat (veri yapısı, temel bir düzenli ifade) yok hafıza dışında devlet var, ve eğer keyfi olarak iç içe, ihtiyacınız olan bir keyfi büyük otomat, hangi çarpan ile fikri birsonluotomat.

Derinliği robot çok büyük olur, çünkü sadece bellek ile sınırlı, sabit bir derinliğe kadar iç içe/eşleştirilmiş öğeleri maç. Ancak uygulamada, itme-aşağı bir otomat, ben kullanmanız gerekir.e örneği LL (yukarıdan aşağıya) veya LR (aşağıdan yukarıya) için açık kaynak kodlu bir dilbilgisi için bir ayrıştırıcı. Dikkate kötü çalışma zamanı davranışını almak zorundasın: O(n^3) O(n), n = uzunluk(giriş) vs.

Avialable, örneğin ANTLR Java için birçok ayrıştırıcı jeneratör var. Java için varolan bir dilbilgisi (veya C) bulmak da zor değil.< / ^ br . Daha fazla arka plan için: Vikipedi Automata Theory

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • karneson

    karneson

    23 Temmuz 2006
  • khloe brooks

    khloe brooks

    25 Temmuz 2011
  • Ralph Phillips

    Ralph Philli

    5 Aralık 2006