Python is 'n mooi script taal. Dit gee ook toegang tot sy eie parser en samesteller. Dit gee ook toegang tot verskeie ander ontleders vir spesiale doeleindes soos XML en string templates.
Maar soms wil jy dalk jou eie parser te hê. Dit is wat is pyPEG vir.
'N vinnige blik op wat gebeur te kry, lees asseblief hierdie artikel oor hoe 'n arbitrêre taal te XML met pyPEG op my blog te ontleed.
Wat is PEG?
PEG beteken Parsing Expression Grammatika. Dit is iets soos die idee van Regular Expressions vir konteks gratis tale; 'n baie duidelike verduideliking wat jy sal vind in die Wikipedia artikel oor PEG.
Met penne kan jy dieselfde tale beskryf soos met BNF (en hulle is selfs soortgelyke).
Wat is 'n Parser-Interpreter?
Algemene parsers nie gebruik penne en top-down parsing, maar LR (n) of LL (n) en bottom-up parsing. Dit lei tot die idee van die implementering van parser kragopwekkers.
Want met LR (n) of LL (n) parsers moet jy eers uit te bereken 'n DFA, gewoonlik jy laat die ontleder kragopwekker doen dit vir jou. Die resultaat is 'n ontleder implementering vir jou BNF grammatika, wat was die insette. 'N Mens kan 'n ontleder kragopwekker 'n samesteller van BNF bel na 'n ontleder implementering.
A Parser-Interpreter werk nie as 'n tolk in plaas van om so 'n samesteller. Net gee jou grammatika as insette, en dit ontleed die beskryf taal uit teks. Daar sal geen program gegenereer word.
Gebruik pyPEG
Dit beteken: die gebruik van pyPEG is baie maklik;-) As jy weet gereelde uitdrukkings reeds, sal jy leer pyPEG om vinnig te gebruik.
'N klein voorbeeld
'N voorbeeld: dink aan 'n eenvoudige taal soos hierdie een:
funksie FAK (n) {
& Nbsp; as (n == 0) {// 0! is 1 per definisie
& Nbsp; terugkeer 1;
& Nbsp;} anders {
& Nbsp; terugkeer N * FAK (n - 1);
& Nbsp;};
}
A pyPEG vir daardie taal lyk soos die volgende kode (sien ook die voorbeeld script):
def kommentaar (): terugkeer [re.compile (r "//.*"), re.compile ("/*.*?*/", re.S)]
def letterlike (): terugkeer re.compile (".? *" r'd * .d * | | d + ')
def simbool (): terugkeer re.compile (r "w +")
def operateur (): terugkeer re.compile (r "+ | - | * | / | ==")
def operasie (): terugkeer simbool, operateur, [letterlik, functioncall]
def uitdrukking (): terugkeer [letterlike, bedryf, functioncall]
def expressionlist (): terugkeer uitdrukking, -1, (",", uitdrukking)
def returnstatement (): terugkeer navraag ("return"), uitdrukking
def ifstatement (): terugkeer navraag ("as"), "(", uitdrukking, ")," blok, navraag ("anders"), blok
def stelling (): terugkeer [ifstatement, returnstatement], ";"
def blok (): return "{", -2, verklaring, "}"
def parameterlist (): return "(", simbool, -1, (",", simbool), ")"
def functioncall (): terugkeer simbool, "(" expressionlist, ")"
def funksie (): terugkeer navraag ("funksie"), simbool, parameterlist, blok
def simpleLanguage (): terugkeer funksie
Wat is nuut in hierdie release:
- Dit is 'n opruim release. Die kode van parse () en komponeer () is vasgestel.
Wat is nuut in die weergawe 1.4:.
- Hierdie weergawe is 'n paar foute met packrat parsing
Wat is nuut in die weergawe 1.3:
- Die vervanging van die tal vir name in pyAST deur die simbool (lys ) klas, wat is redelik geskik, maar ondersteun meer beskrywende kode in samesteller back ends, ook.
Wat is nuut in die weergawe 1.2:.
- Bugs met Unicode in fouthantering is vasgestel
Wat is nuut in die weergawe 1.1:.
- Unicode ondersteuning is bygevoeg
Wat is nuut in die weergawe 0.46:.
- pyPEG.print_trace te True
- Converting pyPEG te Python 3.x nou moeiteloos werk met behulp van 2to3
- Die grammatika reëls wat toegepas word kan opsioneel opgespoor word deur die instelling
- pyPEG sal uitset hierdie spoor te stderr.
Wat is nuut in die weergawe 0.45:.
- bugfixes
Wat is nuut in die weergawe 0.44:
- pyPEG versier nou elke pyAST voorwerp met bron lêer naam en lyn nommer.
Vereistes :
- Python
Kommentaar nie gevind