pyPEG

Software skärmdump:
pyPEG
Mjukvaruinformation:
Version: 2.4.1
Ladda upp dagen: 14 Apr 15
Utvecklare: Volker Birk
Licens: Gratis
Popularitet: 108

Rating: 1.3/5 (Total Votes: 3)

Python är ett trevligt skriptspråk. Det ger även tillgång till en egen parser och kompilator. Det ger dig också tillgång till olika andra tolkar för speciella ändamål såsom XML och stråk mallar.
Men ibland kanske du vill ha en egen parser. Detta är vad som är pyPEG för.
För att få en snabb uppfattning om vad som händer, bör du läsa denna artikel om hur man tolka en godtycklig språk till XML med pyPEG på min blogg.
Vad är PEG?
PEG betyder Pars Expression grammatik. Det är något som idén om reguljära uttryck för kontextfria språk; en mycket tydlig förklaring hittar du i Wikipedia artikel om PEG.
Med PEG kan du beskriva samma språk som med BNF (och de är även liknande).
Vad är en Parser-tolk?
Vanliga tolkar inte använder PEG och top-down parsning, men LR (n) eller LL (n) och bottom-up pars. Detta resulterar i idén om att genomföra parser generatorer.
Eftersom med LR (n) eller LL (n) tolkar du behöver för att beräkna en DFA först, brukar du låter parser skapare göra det åt dig. Resultatet är en parser implementering för din BNF grammatik, som var ingången. Man skulle kunna kalla en parser generator en kompilator från BNF till ett genomförande parser.
En Parser-Tolk fungerar som tolk istället för att vara en sådan kompilator. Bara ge din grammatik som indata, och den tolkar den beskrivna språket ur texten. Det blir inget program genereras.
Använda pyPEG
Det betyder: att använda pyPEG är mycket lätt;-) Om du vet reguljära uttryck redan, kommer du lära dig att använda pyPEG snabbt.
Ett litet prov
Ett exempel: tänk på ett enkelt språk som denna:
Funktionen fak (n) {
& Nbsp; if (n == 0) {// 0! är en per definition
& Nbsp; tillbaka 1;
& Nbsp;} else {
& Nbsp; retur n * fak (n - 1);
& Nbsp;};
}
En pyPEG för det språket ser ut som följande kod (se även exempelskript):
def kommentar (): avkastning [re.compile (r "//.*"), re.compile ("/*.*?*/", re.S)]
def bokstav (): retur re.compile (".? *" r'd * .d * | | d + ')
def symbol (): retur re.compile (r "w +")
def operatör (): retur re.compile (r "+ | - | * | / | ==")
def drift (): retursymbol, operatör, [bokstavlig, Function]
def uttryck (): avkastning [bokstavlig, drift, Function]
def expressionlist (): returnera uttryck, -1, (",", uttryck)
def returnstatement (): retur sökord ("återvända"), uttryck
def ifstatement (): retur sökord ("om"), "(", uttryck, ")", kvarter, sökord ("annat"), blockera
def uttalande (): avkastning [ifstatement, returnstatement], ";"
def-block (): återkomst "{", -2, uttalande, "}"
def parameterlist (): återkomst "(", symbolen, -1, (",", symbol), ")"
def Function (): returnera symbol, "(", expressionlist, ")"
def funktion (): retur sökord ("funktionen"), symbolen, parameterlist, blockera
def simpleLanguage (): returfunktion

Vad är nytt i den här versionen:

  • Detta är en rensning release. Koden för parse () och komponera () fastställdes.

Vad är nytt i version 1.4:.

  • Denna version fixar en del buggar med packrat pars

Vad är nytt i version 1.3:

  • Byta tupel för namn i pyAST med symbolen (listan ) klassen, vilket är ganska kompatibelt, men stöder mer beskrivande kod i kompilatorbackends, också.

Vad är nytt i version 1.2:.

  • Buggar med Unicode i felhantering fixerades

Vad är nytt i version 1.1:.

  • Unicode-stöd lades

Vad är nytt i version 0.46:.

  • pyPEG.print_trace till True
  • Konvertera pyPEG till Python 3.x nu fungerar sömlöst med hjälp 2to3
  • De grammatiska regler som tillämpas kan eventuellt spåras genom att ställa
  • pyPEG kommer utdata här spår till stderr.

Vad är nytt i version 0.45:.

  • Buggfixar

Vad är nytt i version 0.44:

  • pyPEG pryder nu varje pyAST objekt med käll filnamn och linje nummer.

Krav :

  • Python

Liknande mjukvara

Pyexpander
Pyexpander

20 Feb 15

Cython
Cython

27 Sep 15

CMake
CMake

16 Aug 18

D frontend for GCC
D frontend for GCC

14 Apr 15

Annan programvara för utvecklare Volker Birk

YML
YML

11 May 15

Kommentarer till pyPEG

Kommentarer hittades inte
Kommentar
Slå på bilder!