Πόροι για Lexing, tokenising και ανάλυσης σε python

ψήφοι
51

Μπορεί οι άνθρωποι μου δείχνουν πόρους για Lexing, την ανάλυση και tokenising με Python;

Κάνω λίγο hacking για ένα έργο ανοικτού πηγαίου κώδικα ( hotwire ) και ήθελα να κάνω μερικές αλλαγές στον κώδικα που lexes , αναλύει και tokenises τις εντολές τέθηκε σε αυτό. Όπως είναι πραγματικό κώδικα εργασίας είναι αρκετά πολύπλοκη και λίγο δύσκολο να λειτουργήσει.

Δεν έχω εργαστεί στην κώδικα για να lex / ανάλυσης / tokenise πριν, έτσι σκεφτόμουν μία προσέγγιση θα ήταν να εργαστούν με ένα σεμινάριο ή δύο για το θέμα αυτό. Ελπίζω να μάθω αρκετά για να περιηγηθείτε γύρω από τον κωδικό που πραγματικά θέλουν να αλλάξει. Υπάρχει κάτι κατάλληλο εκεί έξω; (Ιδανικά θα μπορούσε να γίνει σε ένα απόγευμα χωρίς να χρειάζεται να αγοράσετε και να διαβάσετε το βιβλίο δράκος πρώτο ...)

Επεξεργασία: (7 Οκτ του 2008) Καμία από τις παρακάτω απαντήσεις δώσει ακριβώς αυτό που θέλω. Μαζί τους θα μπορούσε να δημιουργήσει προγράμματα ανάλυσης από το μηδέν, αλλά θέλω να μάθω πώς να γράψω τη δική μου βασική μονάδα ανάλυσης από το μηδέν, δεν χρησιμοποιούν lex και yacc ή παρόμοια εργαλεία. Αφού γίνει αυτό, τότε μπορώ να καταλάβω τον υπάρχοντα κώδικα καλύτερο.

Έτσι, θα μπορούσε κάποιος να μου το σημείο σε ένα φροντιστήριο όπου μπορώ να οικοδομήσουμε ένα βασικό πρόγραμμα ανάλυσης από το μηδέν, χρησιμοποιώντας μόνο Python;

Δημοσιεύθηκε 31/08/2008 στις 15:50
πηγή χρήστη
Σε άλλες γλώσσες...                            


8 απαντήσεις

ψήφοι
4

Ρίξτε μια ματιά στην τυπική μονάδα shlex και να τροποποιήσετε ένα αντίγραφο από αυτό για να ταιριάζει με τη σύνταξη που χρησιμοποιείτε για το κέλυφος σας, είναι ένα καλό σημείο εκκίνησης

Αν θέλετε όλη τη δύναμη της μια ολοκληρωμένη λύση για Lexing / την ανάλυση, ANTLR μπορεί να δημιουργήσει python πάρα πολύ.

Απαντήθηκε 31/08/2008 στις 16:14
πηγή χρήστη

ψήφοι
3

Προτείνω http://www.canonware.com/Parsing/ , δεδομένου ότι είναι καθαρό python και δεν χρειάζεται να μάθουν γραμματική, αλλά δεν χρησιμοποιείται ευρέως, και έχει συγκριτικά ελάχιστη τεκμηρίωση. Η βαρέων βαρών είναι ANTLR και PyParsing. ANTLR μπορεί να δημιουργήσει java και C ++ parsers πάρα πολύ, και περιπατητές AST, αλλά θα πρέπει να μάθουν αυτό που ισοδυναμεί με μια νέα γλώσσα.

Απαντήθηκε 31/08/2008 στις 22:14
πηγή χρήστη

ψήφοι
28

Είμαι ευτυχής χρήστης του PLY . Είναι μια καθαρή, Python εφαρμογή του Lex & Yacc, με πολλά μικρά λεπτότητα που το καθιστούν αρκετά Pythonic και εύκολο στη χρήση. Από Lex & Yacc είναι τα πιο δημοφιλή Lexing και ανάλυσης εργαλεία και χρησιμοποιούνται για τα περισσότερα έργα, PLY έχει το πλεονέκτημα του να στέκεται στους ώμους γιγάντων. Πολλοί γνώση υπάρχει στο διαδίκτυο σχετικά με Lex & Yacc, και μπορείτε να εφαρμόσετε ελεύθερα να Ply.

PLY έχει επίσης μια καλή σελίδα τεκμηρίωσης με μερικά απλά παραδείγματα για να ξεκινήσετε.

Για μια λίστα με τα μέρη της Python ανάλυσης εργαλείων, δείτε αυτό .

Απαντήθηκε 20/09/2008 στις 04:07
πηγή χρήστη

ψήφοι
4

pygments είναι ένα πηγαίο κώδικα σύνταξη highlighter γραμμένο σε python. Έχει lexers και διαμορφωτές, και μπορεί να είναι ενδιαφέρον να κρυφοκοιτάζει στην πηγή.

Απαντήθηκε 20/09/2008 στις 04:15
πηγή χρήστη

ψήφοι
15

Για μεσαίου σύμπλοκο γραμματικές, PyParsing είναι λαμπρή. Μπορείτε να ορίσετε γραμματικές απευθείας στον κωδικό Python, χωρίς την ανάγκη για παραγωγή κώδικα:

>>> 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', '!']

(Παράδειγμα που λαμβάνονται από την αρχική σελίδα PyParsing).

Με ανάλυσης δράσεις (λειτουργίες που καλείται όταν ένας κανόνας κάποια γραμματική ενεργοποιείται), μπορείτε να μετατρέψετε σαρώνει απευθείας σε αφηρημένη δέντρα σύνταξη, ή οποιαδήποτε άλλη παράσταση.

Υπάρχουν πολλές βοηθητικές λειτουργίες που συμπυκνώνουν επαναλαμβανόμενα μοτίβα, όπως ιεραρχίες χειριστή, εισαγωγικά, φωλιάζουν ή C-style σχόλια.

Απαντήθηκε 26/09/2008 στις 00:05
πηγή χρήστη

ψήφοι
4

Εδώ είναι μερικά πράγματα για να ξεκινήσετε (περίπου από την πιο απλή μέχρι την πιο σύνθετα, τουλάχιστον μέχρι την πλέον ισχυρή):

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

Όταν έμαθα αυτά τα πράγματα, ήταν σε ένα εξάμηνο βίου 400-επίπεδο πανεπιστημιακών σπουδών. Κάναμε μια σειρά από θέσεις στις οποίες κάναμε την ανάλυση με το χέρι? αν θέλετε να καταλάβετε πραγματικά τι συμβαίνει κάτω από το καπό, θα ήθελα να συστήσει την ίδια προσέγγιση.

Αυτό δεν είναι το βιβλίο που χρησιμοποιείται, αλλά είναι αρκετά καλό: Αρχές Μεταγλωττιστές .

Ας ελπίσουμε ότι αυτό είναι αρκετό για να ξεκινήσετε :)

Απαντήθηκε 11/11/2008 στις 00:13
πηγή χρήστη

ψήφοι
18

Αυτή η ερώτηση είναι αρκετά παλιό, αλλά ίσως η απάντησή μου θα βοηθήσει κάποιον που θέλει να μάθει τα βασικά. Θεωρώ ότι αυτός ο πόρος είναι πολύ καλή. Είναι ένας απλός διερμηνέας γραμμένο σε python χωρίς τη χρήση οποιωνδήποτε εξωτερικών βιβλιοθηκών. Έτσι, αυτό θα βοηθήσει όποιον θα ήθελε να κατανοήσει την εσωτερική λειτουργία της ανάλυσης, Lexing και tokenising:

"Μια απλή Intepreter από το μηδέν σε Python:" Μέρος 1 , Μέρος 2 , Μέρος 3 , και το Μέρος 4 .

Απαντήθηκε 14/01/2013 στις 06:36
πηγή χρήστη

ψήφοι
1

Frederico Tomassetti είχε μια καλή (αλλά μικρή) συνοπτική write-up σε όλα τα πράγματα που σχετίζονται από BNF σε δυαδική αποκρυπτογράφηση για:

  • λεξιλογικός,
  • parser,
  • δέντρο αφηρημένη-συντακτικό (AST), και
  • Κατασκεύασμα / code-γεννήτρια.

Ανέφερε ακόμη τη νέα Γραμματική ανάλυση εκφράσεων (PEG).

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

Απαντήθηκε 05/01/2019 στις 19:13
πηγή χρήστη

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