Python este un limbaj de scripting frumos. Este chiar vă oferă acces la propria sa parser și compilator. De asemenea, vă oferă acces la diferite alte interpretoare pentru scopuri speciale, cum ar fi XML și coarde șabloane.
Dar, uneori, poate doriți să aibă propria parser. Aceasta este ceea ce este pyPEG pentru.
Pentru a obține o vizualizare rapidă asupra a ceea ce se întâmplă, vă rugăm să citiți acest articol pe cum pentru a analiza un limbaj arbitrar în XML cu pyPEG pe blog-ul meu.
Ce este PEG?
PEG înseamnă gramatică Exprimarea Parsing. E ceva de genul ideea de a expresiilor regulate pentru context limbi libere; o explicație foarte clară veți găsi în articolul Wikipedia despre PEG.
Cu PEG puteți descrie aceleași limbi ca de BNF (și sunt chiar similare).
Ce este un Parser-interpret?
Interpretoare comune nu sunt utilizați PEG și de sus în jos parsare, dar LR (n) sau LL (n) și parsarea de jos în sus. Acest lucru duce la ideea de punere în aplicare generatoare parser.
Deoarece cu LR (n) sau LL (n) interpretoare aveți nevoie pentru a calcula o DFA în primul rând, de obicei, l-ai lăsat generatorul parser face acest lucru pentru tine. Rezultatul este o implementare parser de gramatica ta BNF, care a fost de intrare. S-ar putea chema un generator de parser un compilator de la BNF la o punere în aplicare parser.
Un Parser-Interpret acționează ca un interpret în loc să fie o astfel de compilator. Doar da gramatica ta ca intrare, și analizează limbajul descris de text. Nu va fi nici un program generat.
Utilizarea pyPEG
Aceasta înseamnă: utilizarea pyPEG este foarte usor;-) Dacă știți expresii regulate deja, veți învăța să utilizați pyPEG repede.
O mică probă
Un exemplu: cred că de un limbaj simplu, ca aceasta:
Funcția FAK (n) {
& Nbsp; dacă (n == 0) {// 0! este de 1, prin definiție,
& Nbsp; a reveni 1;
& Nbsp;} else {
& Nbsp; revenire n * FAK (n - 1);
& Nbsp;};
}
O pyPEG pentru acea limbă arata ca următoarea codul (a se vedea, de asemenea, script probă):
def comentariu (): retur [re.compile (r "//.*"), re.compile ("/*.*?*/", re.S)]
def literal (): re.compile întoarcere (".? *" r'd * .d * | | d + ')
simbol def (): re.compile întoarcere (r "w +")
Operatorul def (): re.compile întoarcere (r "+ | - | * | / | ==")
operație def (): simbol întoarcere, operatorul, [literal, functioncall]
expresie def (): întoarcere [literal, operație, functioncall]
def expressionlist (): returna expresie, -1, (",", expresie)
def returnstatement (): cuvinte cheie întoarcere ("return"), expresie
def ifstatement (): cuvinte cheie întoarcere ("dacă"), "(", expresie, ")", bloc, cuvinte cheie ("altceva"), bloc
Declarație def (): întoarcere [ifstatement, returnstatement], ";"
bloc def (): întoarcere "{", -2, declarație, "}"
def parameterlist (): întoarcere "(", simbol, -1, (",", simbol), ")"
def functioncall (): întoarce simbol, "(", expressionlist, ")"
Funcția def (): cuvinte cheie întoarcere ("funcția"), simbol, parameterlist, bloc
def simpleLanguage (): Funcția de returnare
Ce este nou în această versiune:
- Aceasta este o versiune de curățare. Codul de analizare () și compune () a fost stabilit.
Ce este nou în versiunea 1.4:.
- Această versiune corectează unele bug-uri cu packrat parsare
Ce este nou în versiunea 1.3:
- Înlocuirea tuplul de nume în pyAST de simbolul (listă ) de clasă, care este destul de compatibil, dar susține cod mai descriptiv în backend compilator, de asemenea.
Ce este nou în versiunea 1.2:.
- Bug-uri cu Unicode în eroare de manipulare au fost fixate
Ce este nou în versiunea 1.1:.
- a adăugat suport Unicode
Ce este nou în versiunea 0.46:.
- pyPEG.print_trace la True
- Conversia pyPEG la Python 3.x acum funcționează perfect folosind 2to3
- Regulile gramaticale care sunt aplicate pot fi urmărite în mod opțional prin stabilirea
- pyPEG va ieșire această urmă la stderr.
Ce este nou în versiunea 0,45:.
- Remedieri de erori
Ce este nou în versiunea 0,44:
- pyPEG decoreaza acum fiecare obiect pyAST cu nume de fișier sursă și linie Număr.
Cerințe :
- Python
Comentariile nu a fost găsit