Python lexing, tokenising ve ayrıştırma için kaynaklar

oy
51

insanlar beni ayrıştırma ve Python ile tokenising, Lexing kaynaklara işaret edebilir?

Ben bir açık kaynak projesi (biraz hack yapıyorum Saatlerce tahrik ) ve kod birkaç değişiklik yapmak istediği lexes , ayrıştırır ve tokenises içine girilen komutları. O gerçek çalışma kodudur gibi oldukça karmaşıktır ve sert biraz çalışmak.

Daha önce / ayrıştırma / tokenise Lex ile koduna çalışmadım, bu yüzden bir yaklaşım bu yönü üzerinde bir öğretici veya iki ile çalışmak olacaktır düşünüyordum. Ben aslında değiştirmek istediğiniz kod gezinmek için yeterli öğrenmek umut ediyorum. Orada uygun bir şey var mı? (İdeal satın almak ve ilk ejderha kitap okumak zorunda kalmadan bir öğleden sonra yapılabilir ...)

Düzenleme: (7 Ekim 2008) aşağıdaki yanıtları hiçbiri oldukça istediğimi ver. Onlarla birlikte ben sıfırdan ayrıştırıcılar oluşturabilir, ama Lex ve yacc veya benzeri araçları kullanarak değil, sıfırdan kendi temel ayrıştırıcı yazma öğrenmek istiyorum. Ben o zaman daha iyi varolan kodu anlayabileceği bitmiş olması.

Yani birisi sadece python kullanarak, sıfırdan bir temel ayrıştırıcı inşa edebilirsiniz bir öğretici bana gelin?

Oluştur 31/08/2008 saat 15:50
kaynak kullanıcı
Diğer dillerde...                            


8 cevaplar

oy
4

Standart modül göz at shlex ve size kabuk için kullanılacak sözdizimi maç için bunun bir kopyasını değiştirmek, iyi bir başlangıç noktasıdır

Eğer lexing / ayrıştırma için tam bir çözümün tüm gücü istiyorsanız, ANTLR de piton oluşturabilir.

Cevap 31/08/2008 saat 16:14
kaynak kullanıcı

oy
3

Önerim http://www.canonware.com/Parsing/ saf piton ve bir gramer öğrenmek gerekmez, ancak yaygın olarak kullanılmamaktadır ve nispeten küçük belgelerine sahip olduğundan,. Ağır ANTLR ve PyParsing olduğunu. ANTLR çok java ve C ++ ayrıştırıcılar oluşturmak ve AST yürüyüşe ama yeni bir dille ne miktarda öğrenmek zorunda kalacaktır olabilir.

Cevap 31/08/2008 saat 22:14
kaynak kullanıcı

oy
28

Ben mutlu bir kullanıcısıyım PLY . Bu oldukça Pythonictir ve kullanımı kolay hale küçük incelikler dolu Lex & Yacc saf-Python uygulamasıdır. Lex & Yacc en popüler lexing & ayrıştırma araçları ve çoğu projeler için kullanıldığından, KAT devleri omuzlarında duran avantajına sahiptir. Bilginin Bir çok Lex & Yacc online var ve özgürce o kat için geçerli olabilir.

KAT de iyi vardır dokümantasyon sayfasını başlamak için bazı basit örneklerle.

Araçları ayrıştırma Python sürü bir listesi için bkz bu .

Cevap 20/09/2008 saat 04:07
kaynak kullanıcı

oy
4

pygments Python ile yazılmış bir kaynak kod sözdizimi vurgulayıcı olduğunu. Bu lexers ve biçemleyicileri vardır ve kaynağında gözetleme ilginç olabilir.

Cevap 20/09/2008 saat 04:15
kaynak kullanıcı

oy
15

Orta-kompleks gramerlerin için PyParsing parlak. Doğrudan Python kodu, kod üretimi için gerek içinde dilbilgisi tanımlayabilirsiniz:

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

(Örnek PyParsing ana sayfasından alınmıştır).

Ayrıştırma eylemleri (belli bir dilbilgisi kuralı tetiklendiğinde çağrılır fonksiyonları) ile, soyut sözdizimi ağaçlar, ya da başka temsilin doğrudan ayrıştırır dönüştürebilirsiniz.

Operatör hiyerarşileri, alıntılanan dizeleri, yuvalama veya C tarzı yorumları gibi, tekrarlı modelleri saklanması birçok yardımcı fonksiyonları vardır.

Cevap 26/09/2008 saat 00:05
kaynak kullanıcı

oy
4

Burada başlamak için birkaç şey var (kabaca gelen en basit-to-en-kompleks, az-to-en-güçlü):

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

Bu tür şeyleri öğrendim, bu bir dönem-uzun 400 seviyeli üniversite kursuna oldu. Biz elle ayrıştırma vermedi atamaları bir dizi yaptı; Eğer gerçekten başlık altında neler olduğunu anlamak istiyorsanız, ben aynı yaklaşımı öneriyoruz.

Bu kullandığım kitap değil, ama oldukça iyi: Derleyici Tasarımı İlkeleri .

Umarım bu başlangıç ​​için yeter :)

Cevap 11/11/2008 saat 00:13
kaynak kullanıcı

oy
18

Bu soru oldukça eski, ama belki cevabım temellerini öğrenmek isteyen biri yardımcı olacaktır. Ben bu kaynak çok iyi buluyorum. Bu herhangi bir dış kütüphaneleri kullanılmadan Python ile yazılmış basit bir tercüman olduğunu. Yani bu ayrıştırma, Lexing ve tokenising iç çalışma anlamak istiyorum kimseye yardımcı olacaktır:

"Python Scratch'den Basit intepreter:" Bölüm 1 , Bölüm 2 , Bölüm 3 ve Bölüm 4 .

Cevap 14/01/2013 saat 06:36
kaynak kullanıcı

oy
1

Frederico Tomassetti BNF itibaren ikili çözülmesine ilişkin bütün şeyler özlü iyi (ama kısa) yazma-up vardı:

  • sözcük,
  • ayrıştırıcı,
  • soyut-sözdizimi ağacı (AST) ve
  • / Kod üreteci Construct.

Hatta yeni Ayrıştırma İfade Dilbilgisi (PEG) söz etmiştir.

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

Cevap 05/01/2019 saat 19:13
kaynak kullanıcı

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