pyPEG

Skjermbilde programvare:
pyPEG
Prog.varedetaljer:
Versjon: 2.4.1
Last opp dato: 14 Apr 15
Utvikler: Volker Birk
Lisens: Gratis
Popularitet: 29

Rating: 1.5/5 (Total Votes: 2)

Python er en fin skriptspråk. Det gir også tilgang til sin egen parser og kompilatoren. Det gir deg også tilgang til ulike andre parsere for spesielle formål som XML og streng maler.
Men noen ganger kan det være lurt å ha din egen parser. Dette er hva som er pyPEG for.
For å få en rask oversikt på hva som skjer, kan du lese denne artikkelen om hvordan å analysere en vilkårlig språk til XML med pyPEG på bloggen min.
Hva er PEG?
PEG betyr Parsing Expression Grammar. Det er noe som ideen om regulære uttrykk for kontekst gratis språk; en veldig klar forklaring finner du i Wikipedia-artikkelen om PEG.
Med plugger kan du beskrive de samme språkene som med BNF (og de er enda lignende).
Hva er en parser-Interpreter?
Vanlige parsere ikke bruker pinnene og top-down parsing, men LR (n) eller LL (n) og bottom-up analyse. Dette resulterer i tanken for å implementere parser generatorer.
Fordi med LR (n) eller LL (n) parsere må du beregne ut en DFA først, vanligvis du lar parser generator gjøre dette for deg. Resultatet er en parser gjennomføring for BNF grammatikk, som var inngangs. Man kunne kalle en parser generator en kompilator fra BNF til en parser gjennomføring.
En parser-Interpreter fungerer som tolk i stedet for å være slik en kompilator. Bare gi din grammatikk som input, og det analyserer beskrevet språket ut av teksten. Det blir ingen program generert.
Ved hjelp pyPEG
Det betyr: hjelp pyPEG er veldig enkelt;-) Hvis du vet regulære uttrykk allerede, vil du lære å bruke pyPEG raskt.
En liten prøve
Et eksempel: tenk på et enkelt språk som dette:
funksjon fak (n) {
& Nbsp; if (n == 0) {// 0! er en per definisjon
& Nbsp; tilbake 1;
& Nbsp;} else {
& Nbsp; retur n * fak (n - 1);
& Nbsp;};
}
En pyPEG for dette språket ser ut som følgende kode (se også eksempelskriptet):
def kommentar (): retur [re.compile (r "//.*"), re.compile ("/*.*?*/", re.S)]
def bokstavelig (): retur re.compile (".? *" r'd * .d * | | d + ')
def symbol (): retur re.compile (r "w +")
def operatør (): retur re.compile (r "+ | - | * | / | ==")
def drift (): retur symbol, operatør, [bokstavelig, functioncall]
def uttrykk (): retur [bokstavelig, drift, functioncall]
def expressionlist (): returnerer uttrykk, -1, (",", uttrykk)
def returnstatement (): retur søkeord ("tilbake"), uttrykk
def ifstatement (): retur søkeord ("hvis"), "(", uttrykk, ")", blokk, søkeord ("annet"), blokk
def statement (): retur [ifstatement, returnstatement], ";"
def blokk (): return "{", -2, utsagn, "}"
def parameterlist (): return "(", symbol, -1, (",", symbol), ")"
def functioncall (): returnerer symbol, "(", expressionlist, ")"
def funksjon (): retur søkeord ("funksjon"), symbol, parameterlist, blokk
def simpleLanguage (): retur funksjon

Hva er nytt i denne utgaven:

  • Dette er en opprydding utgivelse. Koden av parse () og komponere () ble fikset.

Hva er nytt i versjon 1.4:.

  • Denne versjonen fikser noen bugs med packrat parsing

Hva er nytt i versjon 1.3:

  • Skifte tuppelen for navnene i pyAST av Symbol (liste ) klasse, noe som er ganske kompatibel, men støtter mer beskrivende kode i kompilatoren backends, også.

Hva er nytt i versjon 1.2:.

  • Bugs med Unicode i feilhåndtering ble fikset

Hva er nytt i versjon 1.1:.

  • Unicode-støtte ble lagt

Hva er nytt i versjon 0.46:.

  • pyPEG.print_trace til True
  • Konvertering pyPEG til Python 3.x nå fungerer sømløst bruker 2to3
  • De grammatiske regler som gjelder kan eventuelt spores ved å sette
  • pyPEG vil produksjonen denne spor til standardfeil.

Hva er nytt i versjon 0.45:.

  • Bugfikses

Hva er nytt i versjon 0.44:

  • pyPEG dekorerer nå hver pyAST objekt med kildefilen navn og linje nummer.

Krav :

  • Python

Lignende programvare

DOS33
DOS33

3 Jun 15

LavaPE
LavaPE

20 Feb 15

Lush
Lush

11 May 15

Annen programvare fra utvikleren Volker Birk

YML
YML

11 May 15

Kommentarer til pyPEG

Kommentarer ikke funnet
Legg til kommentar
Slå på bilder!