Python on mukava scripting kieli. Se jopa antaa sinulle pääsyn se oma parseri ja kääntäjä. Se myös antaa sinulle pääsyn eri muita jäsentimiä erityisiin tarkoituksiin, kuten XML ja string malleja.
Mutta joskus voit olla oma parseri. Tämä on mitä pyPEG varten.
Saat nopean näkemys siitä, mitä tapahtuu, lue tämä artikkeli siitä, miten jäsentää mielivaltaista kieltä XML pyPEG blogiin.
Mikä on PEG?
PEG tarkoittaa jäsennys Expression Kielioppi. Se on jotain, kuten ajatus säännöllisiä lausekkeita varten yhteydessä kielten; hyvin selkeä selitys löydät Wikipedian artikkeli PEG.
Kun PEG voit kuvaavat samaa kieltä kuin kanssa BNF (ja he jopa samanlaisia).
Mikä on Parser-tulkki?
Yhteinen jäsentimiä eivät käytä PEG ja ylhäältä alas jäsentämiseen, mutta LR (n) tai LL (n) ja alhaalta ylös jäsentämiseen. Tämä johtaa ajatukseen täytäntöönpanoa parseri generaattorit.
Koska LR (n) tai LL (n) jäsentimet sinun täytyy laskea ulos DFA ensimmäinen, yleensä annat parseri generaattorin tehdä tämän sinulle. Tuloksena on jäsennin toteutus oman BNF kielioppi, joka oli panos. Sitä voisi kutsua parseri generaattori kääntäjä BNF ja parseri täytäntöönpanoa.
Parser-tulkki ei toimi tulkkina sen sijaan, että tällaisten kääntäjä. Vain antaa kielioppi syötteenä, ja se jäsentää kuvattu kielen pois tekstistä. Ei tule ohjelmaa syntyy.
käyttäminen pyPEG
Tämä tarkoittaa: käyttäen pyPEG on erittäin helppoa;-) Jos tiedät säännöllisiä lausekkeita jo, opit käyttämään pyPEG nopeasti.
Pieni näyte
Esimerkiksi: ajattele yksinkertaista kieltä kuten tämä:
toiminto FAK (n) {
& Nbsp; jos (n == 0) {// 0! on 1 määritelmän
& Nbsp; return 1;
& Nbsp;} else {
& Nbsp; paluu n * fak (n - 1);
& Nbsp;};
}
PyPEG kyseiselle kielelle näyttää seuraava koodi (katso myös mallikomentosarja):
def kommentti (): paluu [re.compile (r "//.*"), re.compile ("/*.*?*/", re.S)]
def kirjaimellinen (): paluu re.compile (r'd * .d * | d + | ". *?" ')
def symboli (): paluu re.compile (r "w +")
def operaattori (): paluu re.compile (r "+ | - | * | / | ==")
def toiminta (): paluu symboli, operaattori, [kirjaimellinen, functioncall]
def ilmaus (): paluu [kirjaimellinen, toiminta, functioncall]
def expressionlist (): palauttaa ilme, -1, ("", ilmaus)
def returnstatement (): paluu hakusana ("palaa"), ilmaisu
def ifstatement (): paluu hakusana ("jos"), "(", ilmaus ")", block, hakusana ("muu"), block
def lausunto (): paluu [ifstatement, returnstatement], ";"
def lohko (): paluu "{", -2, lausuma, "}"
def parameterlist (): return "(", symboli, -1, ("", symboli), ")"
def functioncall (): palauttaa symboli, "(", expressionlist, ")"
def toiminto (): paluu hakusana ("toiminto"), symboli, parameterlist, lohko
def simpleLanguage (): paluu toiminto
Mitä uutta strong> tässä julkaisussa:
- Tämä on siivous julkaisu. Koodi jäsentää () ja säveltää () on vahvistettu.
Mitä uutta strong> versiossa 1.4:
- Tämä versio korjaa joitakin bugeja kanssa packrat jäsentämiseen.
Mitä uutta strong> versiossa 1.3:
- vaihtaminen monikon varten nimet Pyast tunnuksella (luettelo ) luokka, joka on melko yhteensopiva, mutta tukee kuvaavampi koodin kääntäjä backends, too.
Mitä uutta strong> versiossa 1.2:
- Bugs kanssa Unicode virheiden käsittelyä vahvistettu.
Mitä uutta strong> versio 1.1:
- Unicode-tuki lisättiin.
Mitä uutta strong> versiossa 0,46:
- pyPEG.print_trace True.
- Jalostus pyPEG Python 3.x nyt toimii saumattomasti käyttäen 2to3
- kieliopin sääntöjä, joita sovelletaan voidaan mahdollisesti jäljittää asettamalla
- pyPEG syöttävät tätä jäljittää stderr.
Mitä uutta strong> versiossa 0,45:
- Bugikorjauksia.
Mitä uutta strong> versiossa 0.44:
- pyPEG nyt koristettu Pyast objekti lähdetiedoston nimi ja linja numero.
Vaatimukset :
- Python
Kommentteja ei löytynyt