JetPAG
Deweloperzy | Tareq H. Sharafy |
---|---|
Wersja stabilna | 0.6.1 / 7 lutego 2007
|
Wersja podglądu | 0.6.3 / 2007 |
Napisane w | C++ |
System operacyjny | Niezależne od platformy |
Typ | Generator parsera |
Licencja | Powszechna Licencja Publiczna GNU |
Strona internetowa | Strona główna JetPAG |
JetPAG ( J et P arser A uto- G enerator) jest generatorem parserów i analizatorów leksykalnych LL(k) o otwartym kodzie źródłowym , dostępnym na licencji GNU General Public License . Jest to osobiste dzieło Tareqa H. Sharafy'ego i obecnie znajduje się w końcowej fazie rozwoju wersji beta.
Historia
Tareq założył JetPAG jako mały program napisany wyłącznie do celów praktycznych. Wkrótce, gdy zaczął się rozwijać, szybko dodano wiele celów i było oczywiste, że JetPAG jest godny bycia kompletnym projektem. Prawdziwy rozwój JetPAG rozpoczął się pod koniec 2005 roku, mając na celu stworzenie kompletnego frameworka dla potężnego rekurencyjnego i generatora parserów, z naciskiem na łatwość użycia, czytelność kodu i wysoką wydajność generowanego kodu. Po długim okresie wewnętrznego rozwoju i testów, pierwszy pakiet programistyczny JetPAG został wydany przez SourceForge 18 listopada 2006. Rozwój JetPAG jest obecny na faza beta , aktualna wersja to 0.6.1. Rozwój został opóźniony od połowy 2007 do początku 2009 roku, ale później został wznowiony.
Przegląd
Jetpag zawiera kilka modułów: front-end, analizatory i generatory kodu.
Front-end akceptuje metajęzyki gramatyczne jako dane wejściowe.
Analizatory wykonują głównie dwie operacje poprzez przechodzenie przez drzewo . Pierwszym z nich jest obliczanie silnych wyprzedzających dla elementów w gramatyce, a drugim konstruowanie ścieżek wyprzedzających z zestawów wyprzedzających. Ścieżki z wyprzedzeniem grupują, rozkładają na czynniki i wykonują wiele ulepszeń i optymalizacji zestawów z wyprzedzeniem za pomocą specjalnej analizy. Ze ścieżek wyprzedzających zestawy wyprzedzające są przekształcane w zagnieżdżoną formę drzewa, uzyskując w większości przypadków doskonałą ogólną wydajność i poprawę .
Generatory kodu generują na ich podstawie kod źródłowy dla rozpoznawaczy zgodny z gramatyką wejściową wraz z informacjami zebranymi z analizatorów. Obecnie JetPAG generuje kod źródłowy wyłącznie w C++.
Charakter metajęzyka i struktury JetPAG sprawia, że integracja wygenerowanych aparatów rozpoznawania z większymi aplikacjami jest łatwa i prosta. JetPAG zawiera również pewne udogodnienia w dostarczonym środowisku, aby pomóc programistom z małymi narzędziami i zaoszczędzić czas programowania od wielu minimalnych zadań związanych z rozpoznawaniem języka.
Gramatyki JetPAG
Gramatyki JetPAG są napisane w metajęzyku opartym na formie EBNF i wyrażeniach regularnych , z rozbudowanymi dodatkami i poprawkami. Metajęzyk gramatyk JetPAG został zaprojektowany tak, aby maksymalnie elastycznie obsługiwać zarówno proste gramatyki, jak i duże, skomplikowane gramatyki. Parsery i analizatory leksykalne są podobnie definiowane i generowane dla prostoty i łatwości użytkowania. Oto prosty przykład gramatyki podstawowego kalkulatora:
gramatyka Calc: parser CalcP: wyrażenie: multiplikatywna ( '+' multiplikatywna | '-' multiplikatywna )* ; mnożnik: czynnik ( czynnik '*' | czynnik '/' )* ; czynnik: LCAŁK | '(' wyrażenie ')' ; skaner CalcS: INT: '0'-'9'+; DODATKOWO: „+”; MINUS: '-'; GWIAZDKA: „*”; UKOŃCZENIE: „/”; LP: „(”; RP: „)”;