Python gözəl skript dilidir. Bu hətta öz parser və compiler imkanı verir. O, həmçinin XML və simli şablonları kimi xüsusi məqsədlər üçün müxtəlif digər parsers imkanı verir.
Amma bəzən öz parser üçün edə bilərsiniz. Bunun üçün pyPEG nə edir.
Neler tez görünüşü almaq üçün, mənim blog pyPEG ilə XML bir ixtiyari dili analiz etmək üçün necə bu maddə oxuyun.
PEG nə
PEG təhlil İfadə Grammar deməkdir. Bu kontekstində pulsuz dillər üçün normal ifadeler ideyası kimi bir şey var; Siz PEG haqqında Wikipedia article tapa bilərsiniz Çox aydın izah.
Dirək ilə BNF ilə kimi eyni dildə təsvir edə bilərsiniz (və hətta oxşar istəyirik).
bir Parser-Interpreter nədir?
Ümumi parsers təhlil dirək və top-down istifadə edirsinizsə, lakin LR (n) və ya LL (n) və alt-up təhlil deyil. Bu parser generatorları həyata keçirilməsi ideyası ilə nəticələnir.
LR (n) və ya LL (n) parsers ilə ilk DFA hesablamaq lazımdır, çünki, adətən parser generator sizin üçün bunu edək. Nəticədə daxil oldu sizin BNF qrammatika üçün parser təzahürüdür. Bir parser həyata keçirilməsi üçün parser generator BNF bir compiler zəng edə bilər.
A Parser-Interpreter əvəzinə belə bir compiler olan bir tərcüməçi kimi çalışır. Yalnız giriş kimi qrammatika verir və mətn həyata təsvir dil çözümler. Yaradılan heç bir proqram olacaq.
pyPEG istifadə
Bu o deməkdir ki: istifadə pyPEG çox asandır;-) Əgər siz artıq normal ifadeler bilirsinizsə, siz tez pyPEG istifadə öğreneceksiniz.
A kiçik bir nümunə
Məsələn: bu kimi bir sadə dildə hesab:
funksiyası Fak (n) {
& Nbsp; if (n == 0) {// 0! müəyyən 1
& Nbsp; 1 qayıtmaq;
& Nbsp;} else {
& Nbsp; return n * Fak (n - 1);
& Nbsp;};
}
Ki, dil üçün pyPEG (həmçinin nümunə script bax) aşağıdakı kod kimi görünür:
def şərh (): qaytarılması [re.compile (r "//.*"), re.compile ("/*.*?*/", re.S)]
def hərfi (): qaytarılması re.compile (". *" r'd * .D * | | d + ')
def simvolu (): qaytarılması re.compile (r "+ w")
def operator (): qaytarılması re.compile (r "+ | - | * | / | ==")
def əməliyyatı (): qaytarılması simvolu, operator, [hərfi, functioncall]
def ifadə (): qaytarılması [hərfi, əməliyyat, functioncall]
def expressionlist (): qayıtmaq ifadə -1 ("," ifadəsi)
def returnstatement (): qaytarılması söz ("geri"), ifadə
def ifstatement (): qaytarılması söz ("əgər") ("Başqa"), "(" ifadə edərək, ")", məhəllə, söz, məhəllə
def bəyanat (): qaytarılması [ifstatement, returnstatement] ","
def məhəllə () qaytarılması "{", -2, şərhində, "}"
def parameterlist (): qaytarılması "(" rəmzi, -1 ("," rəmzi), ")"
def functioncall (): "(" expressionlist ")" simvolu geri
def function (): qaytarılması söz ("funksiyası"), rəmzi, parameterlist, məhəllə
def simpleLanguage (): geri funksiyası
Yeni Bu azad nədir:
- Bu təmizləmə azad edir. parse kod () və bəstələmək () müəyyən olunub.
nədir Versiya 1.4 Yeni:.
- Bu versiya packrat təhlil bəzi hataları giderir
nədir Versiya 1.3 Yeni
- Symbol tərəfindən pyAST adlar üçün tuple əvəz (siyahı də kifayət qədər uyğun gəlir, lakin compiler backends daha təsviri kodu dəstəkləyir) sinif.
nədir Versiya 1.2 Yeni:.
- səhv rəftar Unicode ilə Bugs müəyyən edilmişdir
Version 1.1 yeni nədir.
- Unicode dəstəyi əlavə edildi
nədir versiyası 0,46 Yeni:.
- True üçün pyPEG.print_trace
- sorunsuz 2to3 istifadə edərək işləyir indi Python 3.x pyPEG konvertasiya
- qəbulu ilə isteğe görmək olar tətbiq qrammatika qaydaları
- pyPEG çıxış edəcək stderr bu iz.
versiya 0.45 yeni nədir.
- Bugfixes
nədir versiya 0.44 Yeni
- pyPEG indi mənbə fayl adı və xətti ilə hər pyAST obyekt bəzəyir nömrəsi.
tələblər
- Python
Şərhlər tapılmadı