Ressurser for lexing, tokenising og parsing i python

stemmer
52

Kan folk peke meg til ressurser på lexing, parsing og tokenising med Python?

Jeg gjør litt hacking på åpen kildekode ( hotwire ) og ønsket å gjøre noen endringer i koden som lexes , analyserer og tokenises kommandoene inngått den. Som det er ekte arbeider kode er det ganske komplisert og litt vanskelig å trene.

Jeg har ikke jobbet med kode for å lex / analysere / tokenise før, så jeg tenkte en tilnærming ville være å arbeide gjennom en tutorial eller to på dette aspektet. Jeg håper å lære nok til å navigere rundt koden jeg faktisk ønsker å endre. Er det noe som passer der ute? (Ideelt sett kunne gjøres i en ettermiddag uten å måtte kjøpe og lese dragen boken først ...)

Edit: (07.10.2008) Ingen av de under svarene helt gi det jeg ønsker. Med dem kan jeg generere parsere fra bunnen av, men jeg ønsker å lære å skrive min egen grunnleggende parser fra bunnen av, ikke bruker lex og yacc eller lignende verktøy. Etter å ha gjort det jeg kan da forstå den eksisterende koden bedre.

Så kan noen peke meg til en tutorial der jeg kan bygge en enkel parser fra bunnen av, ved hjelp av bare Python?

Publisert på 31/08/2008 klokken 16:50
kilden bruker
På andre språk...                            


8 svar

stemmer
29

Jeg er en lykkelig bruker av PLY . Det er en ren-Python gjennomføring av Lex & YACC, med mange små finesser som gjør det ganske Pytonske og enkel å bruke. Siden Lex & YACC er de mest populære Lexing & parsing verktøy og brukes for de fleste prosjekter, har PLY fordelen av å stå på Kjempenes skuldre. Mye av kunnskapen som finnes på nettet på Lex & YACC, og du kan fritt bruke den til lags.

PLY har også en god dokumentasjon med noen enkle eksempler for å komme i gang.

For en liste over mange Python parsing verktøy, se denne .

Svarte 20/09/2008 kl. 05:07
kilden bruker

stemmer
19

Dette spørsmålet er ganske gamle, men kanskje svaret mitt ville hjelpe noen som ønsker å lære det grunnleggende. Jeg finner denne ressursen til å være veldig bra. Det er en enkel tolk skrevet i python uten bruk av noen eksterne biblioteker. Så dette vil hjelpe alle som ønsker å forstå den interne driften av parsing, lexing, og tokenising:

"En enkel Intepreter fra grunnen av i Python:" Del 1 , Del 2 , Del 3 og Del 4 .

Svarte 14/01/2013 kl. 08:36
kilden bruker

stemmer
15

For mellom kompleks grammatikker, PyParsing er strålende. Du kan definere grammatikker direkte i Python-kode, ikke behov for kodegenerering:

>>> from pyparsing import Word, alphas
>>> greet = Word( alphas ) + "," + Word( alphas ) + "!" # <-- grammar defined here
>>> hello = "Hello, World!"
>>>> print hello, "->", greet.parseString( hello )
Hello, World! -> ['Hello', ',', 'World', '!']

(Eksempel hentet fra PyParsing hjemmesiden).

Med parse handlinger (funksjoner som påberopes når en viss grammatikk regel utløses), kan du konvertere analyserer direkte til abstrakte syntaks trær eller annen representasjon.

Det er mange hjelpefunksjoner som innkapsler gjentakende mønstre, som operatør hierarkier, sitert strenger, hekkende eller C-stil kommentarer.

Svarte 26/09/2008 kl. 01:05
kilden bruker

stemmer
4

Her er et par ting å komme i gang (omtrent fra enkleste til mest komplekse, minst til mest kraftfulle):

http://en.wikipedia.org/wiki/Recursive_descent_parser

http://en.wikipedia.org/wiki/Top-down_parsing

http://en.wikipedia.org/wiki/LL_parser

http://effbot.org/zone/simple-top-down-parsing.htm

http://en.wikipedia.org/wiki/Bottom-up_parsing

http://en.wikipedia.org/wiki/LR_parser

http://en.wikipedia.org/wiki/GLR_parser

Når jeg lærte slike ting, det var i et semester lange 400-nivå universitet kurs. Vi gjorde en rekke oppdrag hvor vi parsing for hånd; Hvis du ønsker å virkelig forstå hva som skjer under panseret, vil jeg anbefale det samme tilnærming.

Dette er ikke den boken jeg brukte, men det er ganske bra: Principles of Compiler Design .

Forhåpentligvis det er nok til å komme i gang :)

Svarte 11/11/2008 kl. 01:13
kilden bruker

stemmer
4

pygments er en kildekode syntaks utheving skrevet i Python. Det har lexers og formatters, og kan være interessant å kikke på kilden.

Svarte 20/09/2008 kl. 05:15
kilden bruker

stemmer
4

Ta en titt på standard modul shlex og endre en kopi av den for å matche syntaksen du bruker til skallet, er det et godt utgangspunkt

Hvis du vil ha all den makt en komplett løsning for lexing / parsing, ANTLR kan generere python også.

Svarte 31/08/2008 kl. 17:14
kilden bruker

stemmer
3

Jeg foreslår http://www.canonware.com/Parsing/ , siden det er ren python, og du trenger ikke å lære grammatikk, men det er ikke mye brukt, og har relativt lite dokumentasjon. Tungvekt er ANTLR og PyParsing. ANTLR kan generere Java og C ++ parsere også, og ASAT turgåere, men du er nødt til å lære hva som utgjør et nytt språk.

Svarte 31/08/2008 kl. 23:14
kilden bruker

stemmer
1

Frederico Tomassetti hadde en god (men kort) konsis skrive opp alle ting relatert fra BNF til binær tyde på:

  • leksikalsk,
  • parser,
  • abstrakt syntaks-treet (AST), og
  • Konstruer / kode-generator.

Han nevnte også den nye Parsing Expression Grammar (PEG).

https://tomassetti.me/parsing-in-python/

Svarte 05/01/2019 kl. 21:13
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more