2010-08-04 8 views
5

Piszę prosty język szablonu tekstowego dla aplikacji internetowej, którą piszę (pomyśl o szablonie google'a). Po zakończeniu będzie zawierał tylko niewielką liczbę możliwych akcji, proste rzeczy, takie jak "oceniaj i wykonuj", "oceniaj i drukuj", "oceń i wyjdź z html", "komentarz". Myślałem o ręcznym pisaniu całego parsera od zera, ale zacząłem szukać generatorów analizatora składni takich jak lex, flex i antlr. Te wydają się być czymś więcej niż potrzebuję dla mojej prostej składni. Nasuwa się zatem pytanie, w którym momencie praktyczne jest użycie generatora parsera?Kiedy można używać generatora analizatora składni?

+3

Ouch. Miły podstęp przez Adobe, aby uzyskać więcej, niż (prawdopodobnie) zapłacili. ;) Czy "gnu-flex" byłby lepszym tagiem? – spender

+0

Książka Pragmatic Programmera [Wzory implementacji języka] (http://pragprog.com/titles/tpdsl/language-implementation-patterns) ma doskonały pierwszy rozdział omawiający różne "mocne strony" analizatorów dla różnych języków. – sarnold

+0

Antlr jest drogą, szczególnie ze względu na gui AntlrWorks, które naprawdę pomaga w debugowaniu gramatyki i składni. – Mawg

Odpowiedz

6

Prędzej, niż później. Jeśli masz teraz prostą składnię, użycie generatora parsera jest łatwe. Ułatwia to nadal, gdy chcesz dodać zmienne i pętle oraz warunkowe.

Ale czekaj! - Nie ma powodu, aby wymyślać własny język, chyba że jest on specyficzny dla domeny, na przykład eqn lub TeX lub języków modelowania molekularnego. Znacznie lepiej jest osadzić język, który został specjalnie zaprojektowany do tego celu. Tcl jest starym strażnikiem w tym królestwie, z Python będącym silnym rywalem. Perl został również zaprojektowany jako osadzony język skryptowy, ale uważam go za kiepski kandydat, ponieważ prawdopodobnie dostarczy on bardzo "tylko do zapisu" kodu w rękach użytkowników.

Projektowanie języka jest trudne, a palenie wszystkich skrzypiących bitów jest jeszcze trudniejsze. Zarówno w Pythonie, jak iw Tcl możesz zdecydować, w jakim stopniu język podstawowy może zostać udostępniony użytkownikom, a także otworzyć zamknięte bity, gdy będziesz ich potrzebować.

Pierwszy mały język, który napisałem (który zadziwiająco jest nadal wykorzystywany w produkcji) byłby o wiele lepszy, gdyby Tcl został tam użyty.

+1

+1 dla "Prędzej niż później" – Mawg

2

Z jednej strony, jeśli nie masz doświadczenia w korzystaniu z jednego z tych narzędzi i masz czas, to być może jest to dobra okazja, aby nauczyć się tego dla tego przypadku użycia. Mogłabym sobie wyobrazić, że gdybyś był doświadczony w tych narzędziach, po prostu byś ich używał, podobnie jak wielu chwytów dla wyrażeń regularnych dla wielu zadań parsujących.

Z drugiej strony, proste parsery nie są trudne do zrobienia, nie są nawet trudne do utrzymania. Lubię je pisać i zazwyczaj docieram do nich, gdy zadanie wymaga jednego, a nie narzędzia (ale nie jestem super zaznajomiony z narzędziami). W wielu przypadkach wolę prosty parser od regex, w zależności od zadania.

Powiązane problemy