Python ay isang magaling na wika scripting. Ito ay nagbibigay sa kahit iyo ng access sa ito ay sariling pang-parse at compiler. Ito ay nagbibigay rin sa iyo ng access sa iba't ibang mga iba pang mga parsers para sa mga espesyal na mga layunin tulad ng mga template ng XML at string.
Ngunit minsan maaaring gusto mong magkaroon ng iyong sariling pang-parse. Ito ay kung ano ang pyPEG para sa.
Upang makakuha ng mabilis na pagtingin sa kung ano ang nangyayari, mangyaring basahin ang artikulong ito sa kung paano i-parse ang isang arbitrary na wika sa XML na may pyPEG sa aking blog.
Ano ang peg?
Nangangahulugan peg sa pag-parse Expression Grammar. Ito ay isang bagay na tulad ng ideya ng Karaniwang Expression para sa konteksto libreng mga wika; isang napaka-malinaw na paliwanag na makikita mo sa mga artikulo sa Wikipedia tungkol peg.
Sa PEGs maaari mong ilarawan ang parehong mga wika gaya ng sa BNF (at ang mga ito ay mas katulad).
Ano ang isang pang-parse-Interpreter?
Mga Karaniwang parsers ay hindi gumagamit ng PEGs at top-down na pag-parse, ngunit .lr (n) o makikipag (n) at ibaba-up sa pag-parse. Nagreresulta ito sa mga ideya ng pagpapatupad ng pang-parse generators.
Dahil sa .lr (n) o makikipag (n) parsers kailangan mo upang makalkula out muna ng DFA, karaniwan mong hayaan ang pang-parse generator gawin ito para sa iyo. Ang resulta ay isang pang-parse ng pagpapatupad para sa iyong BNF grammar, na kung saan ay ang pag-input. Maaaring isa tumawag sa isang pang-parse generator isang compiler mula sa BNF sa isang pang-parse ng pagpapatupad.
Ang pang-parse-Interpreter gumagana bilang isang interpreter sa halip ng pagiging tulad ng compiler. Bigyan lamang ang iyong grammar bilang input, at ito Pina-parse ang wika na inilarawan sa labas ng teksto. Walang magiging programa binuo.
Ang paggamit ng pyPEG
Iyon ay nangangahulugang: gamit ang pyPEG Napakadaling;-) Kung alam mo regular na expression na, ikaw ay matutong gumamit pyPEG mabilis.
Ang isang maliit na sample
Isang halimbawa: sa tingin ng isang simpleng wika tulad ng isang ito:
-andar fak (n) {
& Nbsp; kung (n == 0) {// 0! 1 pagkaunawa
& Nbsp; bumalik 1;
& Nbsp;} iba pa {
& Nbsp; return n * fak (n - 1);
& Nbsp;};
}
Ang isang pyPEG para sa wika na kamukha ng sumusunod na code (tingnan din ang sample script):
def komento (): return [re.compile (r "//.*"), re.compile ("/*.*?*/", re.S)]
def literal (): return re.compile (".? *" r'd * .d * | | d + ')
simbolo def (): return re.compile (r "w +")
def operator (): return re.compile (r "+ | - | * | / | ==")
def operasyon (): simbolo ng pagbalik, operator, [literal, functioncall]
def expression (): return [literal, pagpapatakbo, functioncall]
def expressionlist (): bumalik expression, -1, (",", expression)
def returnstatement (): return keyword ("return"), expression
def ifstatement (): return keyword ("kung"), "(", expression, ")", bloke, ang keyword ("iba pa"), bloke
def pahayag (): return [ifstatement, returnstatement], ";"
def bloke (): return "{", -2, pahayag, "}"
def parameterlist (): return "(", simbolo, -1, (",", na simbolo), ")"
def functioncall (): bumalik simbolo, "(", expressionlist, ")"
def function na (): return keyword ("function na"), simbolo, parameterlist, bloke
def simpleLanguage (): return function na
Ano ang bagong sa paglabas:
- Ito ay isang cleanup release. Ang code ng pag-parse () at sumulat () ay naayos na.
Ano ang bagong sa bersyon 1.4:.
- Ang bersyon na ito Inaayos ng ilang mga bug na may packrat sa pag-parse
Ano ang bagong sa bersyon 1.3:
- Kapag pinalitan ang tuple para sa mga pangalan sa pyAST ng Simbolo (listahan ) klase, na kung saan ay medyo tugma, ngunit sumusuporta sa higit pang mapaglarawang code sa compiler backends, masyadong.
Ano ang bagong sa bersyon 1.2:.
- Bug sa Unicode sa handling error ay naayos
Ano ang bagong sa bersyon 1.1:.
- suporta sa Unicode ay naidagdag
Ano ang bagong sa bersyon 0.46:.
- pyPEG.print_trace sa True
- Pag-convert ng pyPEG sa Python 3.x ngayon ay gumagana ng walang putol gamit 2to3
- Ang mga patakaran grammar na inilalapat maaaring opsyonal traced sa pamamagitan ng pagtatakda
- pyPEG habilin output na ito trace sa stderr.
Ano ang bagong sa bersyon 0.45:.
- Bugfixes
Ano ang bagong sa bersyon 0.44:
- pyPEG decorates ngayon bawat pyAST bagay na may pangalan na source file at linya numero.
Mga Kinakailangan :
- Python
Mga Komento hindi natagpuan