2009-10-10 11 views
39

Po utworzeniu prostego parsera w języku Python, programowanie w pobliżu domeny problemu i tak dalej.Mini-języki w Pythonie

W każdym razie, zastanawiałem się, w jaki sposób ludzie robią to - jakie są preferowane sposoby robienia tego w Pythonie?

Nie zamierzam podawać szczegółowych informacji o tym, czego szukam, ponieważ właśnie badam, jak proste jest to całe pole w Pythonie.

Dzięki za twój wkład!

+1

podobne do: http://stackoverflow.com/questions/2945357/python-how-best-to-parse-a-simple-grammar –

Odpowiedz

34

Pyparsing jest przydatny do pisania "mało języków". Dałem presentation at PyCon'06 na pisanie prostego silnika gry przygodowej, w którym analizowano i interpretowano język zestawu poleceń gry ("inwentarz", "zabierz miecz", "upuść książkę" itp.). (Kod źródłowy here.)

Możesz również znaleźć linki do innych artykułów pyparskich w wiki pyparstwie Publications page.

+6

Pyparsing jest absolutnie fantastyczne biblioteki, można analizować następny do wszystkiego przy minimalnej ceremonii. Zbudowałem rekurencyjny parser PHP (statyczną analizę kodu) w dwa popołudnia z jego użyciem. Nie mogłem tego wystarczająco polecić. Dokumenty wymagają około 2 godzin do przeczytania. –

3

Aby być produktywne, bym zawsze użyć generatora parsera jak CocoPy (Tutorial), aby mieć swoją gramatykę przekształcona (poprawnie) parsera (chyba, że ​​chcesz wprowadzić ręcznie parser dla dobra nauki).

Reszta to pisanie rzeczywistego interpretera/kompilatora (Utwórz kod bajtowy na podstawie stosu lub pamięć AST, aby ją zinterpretować, a następnie ocenić).

4

Python jest tak cudownie prostym i rozszerzalnym językiem, że zasugerowałbym jedynie stworzenie kompleksowego modułu python i kodowanie przeciw temu.

Widzę, że podczas pisania powyższego, już wspomniano o PLY.

19

Polecam funcparserlib. Został napisany specjalnie dla parsowania małych języków i DSL-ów i jest szybszy i mniejszy niż pyparsing (zobacz statystyki na jego stronie głównej). Minimalistów i funkcjonalnych programistów powinien lubić funcparserlib.

Edycja: Przy okazji, jestem autorem tej biblioteki, więc moja opinia może być stronnicza.

+4

W pewnym momencie nie chciałem promować ani wspierać mojego modułu pyparskiego - nie wstydź się! Upewnij się, że piszesz do Neda Batcheldera, aby dodać stronę "funcparserlib" do strony kompendium analizatora składni, jest to popularne (i cenne) źródło informacji dla wielu użytkowników Pythona w poszukiwaniu biblioteki parsującej. – PaulMcG

+0

@Paul Dzięki za porady :) –

+0

Wydaje się bardzo przydatna biblioteka, a kod wygląda bardzo wyraźnie! Dzięki! –

3

Jeśli teraz zapytasz mnie o to, wypróbuję bibliotekę textx dla Pythona. Możesz bardzo łatwo utworzyć dsl w tym pythonie! Zaletą jest to, że tworzy on dla ciebie AST, a leksykowanie i parsowanie są połączone.

http://igordejanovic.net/textX/