Python güzel bir betik dilidir. Hatta bunu kendi çözümleyici ve derleyici erişmenizi sağlar. Ayrıca XML ve dize şablonları gibi özel amaçlar için farklı diğer ayrıştırıcıları erişmenizi sağlar.
Ama bazen kendi çözümleyici isteyebilirsiniz. Bu için pyPEG ne olduğunu.
Neler hızlı bir görünüm elde etmek için, benim blog pyPEG ile XML'e keyfi dili ayrıştırmak için nasıl bu makaleyi okuyun lütfen.
PEG Ne ?
PEG Ayrıştırma ifade dilbilgisi anlamına gelir. Bu bağlam ücretsiz dil Düzenli İfadelerinin fikir gibi bir şey; Eğer PEG hakkında Wikipedia makalesinde bulacaksınız çok net bir açıklama.
PEG ile BNF olduğu gibi aynı dili tanımlayabiliriz (ve hatta benzer konum).
Ayrıştırıcı-Tercümanlık nedir?
Ortak ayrıştırıcıları ayrıştırma PEG'lere ve yukarıdan aşağıya kullanarak, ama LR (n) veya LL (n) ve aşağıdan yukarıya ayrıştırma değil. Bu ayrıştırıcı jeneratör uygulanması fikri sonuçlanır.
LR (n) veya LL (n) ayrıştırıcıları ile ilk bir DFA dışarı hesaplamak gerekir, çünkü genellikle ayrıştırıcı jeneratör sizin için yapalım. Sonuç girişi oldu senin BNF dilbilgisi, bir ayrıştırıcı uygulamasıdır. Bir bir ayrıştırıcı uygulamasına bir ayrıştırıcı jeneratör BNF bir derleyici diyebiliriz.
Bir Ayrıştırıcı-Tercüman yerine böyle bir derleyici olmanın bir tercüman olarak çalışır. Sadece girdi olarak dilbilgisi vermek, ve metnin dışına tarif dilini ayrıştırır. Oluşturulan bir program olacak.
pyPEG kullanma
Bunun anlamı: kullanarak pyPEG çok kolay;-) Zaten düzenli ifadeler biliyorsanız, hızlı pyPEG kullanmayı öğreneceksiniz.
Küçük bir numune
Bir örnek: Bu gibi basit bir dil düşünüyorum:
işlev fak (n) {
& Nbsp; if (n == 0) {// 0! tanım olarak 1
& Nbsp; return 1;
& Nbsp;} else {
& Nbsp; dönüş n * fak (n - 1);
& Nbsp;};
}
Bu dil için bir pyPEG (ayrıca örnek komut bakınız) aşağıdaki kodu gibi görünüyor:
def Yorum (): return [re.compile (r "//.*"), re.compile ("/*.*?*/", re.S)]
def değişmezi (): return re.compile (".? *" r'd * .d * | | d + ')
def sembolü (): return re.compile (r "w +")
def operatörü (): return re.compile (r "+ | - | * | / | ==")
def operasyonu (): dönüş sembolü, operatör, [literal, İşlevÇağrısı]
def ifadesi (): return [literal, operasyon, İşlevÇağrısı]
def Expressionlist (): return ifadesi, -1, (",", ifadesi)
def returnstatement (): return anahtar kelime ("dönüş"), ifadesi
def ifstatement (): return anahtar kelime ("eğer") ("else"), "(" ifadesi, ")", blok, anahtar kelime, blok
def deyimi (): return [ifstatement, returnstatement] ";"
def bloğu (): return "{", -2, açıklamasında, "}"
def parameterList (): return "(" sembolü, -1, (",", sembol), ")"
def İşlevÇağrısı (): "(", Expressionlist ")", sembol dönüş
def function (): return anahtar kelime ("işlevi"), sembol, parameterList, blok
def simpleLanguage (): dönüş fonksiyonu
Yeni Bu sürümde ne:
- Bu bir temizleme sürümüdür. ayrıştırma kodu () ve beste () tespit edildi.
nedir sürüm 1.4 Yeni:.
- Bu sürüm packrat ayrıştırma bazı hataları giderir
nedir sürüm 1.3 Yeni:
- Sembol tarafından pyAST adları için başlığın değiştirilmesi (liste Çok oldukça uyumlu, ama derleyici backendleri daha açıklayıcı kod destekler) sınıfı,.
nedir sürüm 1.2 Yeni:.
- hata işleme Unicode ile Bugs tespit edildi
sürüm 1.1 yeni nedir:.
- Unicode desteği eklendi
Hangi sürümü 0.46 Yeni:.
- true pyPEG.print_trace
- sorunsuz 2to3 kullanarak çalışır şimdi Python 3.x için pyPEG dönüştürme
- ayarlayarak isteğe izlenebilir uygulanan gramer kuralları
- pyPEG çıktısı stderr'e bu iz.
sürüm 0.45 yeni nedir:.
- Bugfixes
Hangi sürümü 0.44 Yeni:
- pyPEG şimdi kaynak dosya adı ve çizgisi ile her pyAST nesnesini süsleyen numara.
Gereksinimler :
- Python
Yorum Bulunamadı