Parser Grammar Engine
Parser Grammar Engine ( PGE , oryginalnie Parrot Grammar Engine ) jest kompilatorem i środowiskiem wykonawczym reguł Raku dla maszyny wirtualnej Parrot . PGE używa tych reguł do konwersji gramatyki wyrażeń parsowania na kod bajtowy Parrot . Jest to zatem kompilacja reguł do programu, w przeciwieństwie do większości maszyn wirtualnych i środowisk wykonawczych, które przechowują wyrażenia regularne w drugorzędnym formacie wewnętrznym, który jest następnie interpretowany w czasie wykonywania przez silnik wyrażeń regularnych. Format reguł używany przez PGE może wyrażać dowolne wyrażenia regularne i większość gramatyk formalnych i jako taki stanowi pierwsze ogniwo w łańcuchu kompilatorów dla wszystkich języków interfejsu Parrot.
Po uruchomieniu kod bajtowy wygenerowany przez PGE przeanalizuje tekst zgodnie z opisem w regułach wejściowych, generując drzewo analizy. Drzewem analizy można manipulować bezpośrednio lub wprowadzić go do następnego etapu łańcucha narzędzi kompilatora Parrot w celu wygenerowania AST, z którego może nastąpić generowanie kodu (jeśli gramatyka opisuje język programowania).
Historia
Pierwotnie nazwany P6GE i napisany w C, PGE został przetłumaczony na natywny Parrot i przemianowany niedługo po jego pierwszym wydaniu w listopadzie 2004. Jego autorem jest Patrick R. Michaud. PGE został napisany w celu zmniejszenia ilości pracy wymaganej do zaimplementowania kompilatora na Parrot. Został również napisany, aby umożliwić Perlowi 6 łatwe samodzielne hostowanie, chociaż obecny Pugs nie wykorzystuje już PGE jako podstawowego zaplecza reguł na rzecz natywnego silnika o nazwie PCR.
Wewnętrzne
PGE łączy w sobie trzy style parsowania:
- Reguły Raku
- parser pierwszeństwa operatorów
- niestandardowe podprogramy parsowania
Podstawową formą są reguły Raku, więc reguła PGE może wyglądać tak dla gramatyki tylko dodawania:
termin reguły { <liczba> | \( <wyrażenie> \) } numer reguły { \d+ } wyrażenie reguły { <wyrażenie> ( '+' <wyrażenie> )* }
Parser pierwszeństwa operatorów umożliwia zbudowanie tabeli operatorów i użycie jej bezpośrednio w parserze stylów reguł Perla 6, jak na przykład:
wyrażenie reguły jest opcjonalne { ... } termin reguły { <liczba> | \( <wyr> \) } numer reguły { \d+ } proto termin: ma pierwszeństwo ( '=' ) jest analizowany ( & term ) {...} wrostek proto : + jest luźniejszy ( 'term:' ) {... }
Osiąga to ten sam cel, jakim jest zdefiniowanie prostej gramatyki zawierającej tylko dodawanie, ale robi to za pomocą kombinacji wyrażenia regularnego/reguł w stylu Raku dla terminu
i liczby
oraz opcji redukcji przesunięcia dla wszystkiego innego.
Generowanie kodu
Chociaż PGE generuje kod, który analizuje gramatykę opisaną przez regułę i może być używany w czasie wykonywania do obsługi prostych gramatyk i wyrażeń regularnych znajdujących się w kodzie, jego głównym celem jest analizowanie języków wysokiego poziomu .
Łańcuch narzędzi kompilatora Parrot jest podzielony na kilka części, z których PGE jest pierwszą. PGE konwertuje kod źródłowy do parsowania drzew . Tree Grammar Engine (TGE) następnie konwertuje je na Parrot Abstract Syntax Trees (PAST). Drugi przebieg TGE następnie konwertuje PAST na Parrot Opcode Syntax Trees (POST), które można bezpośrednio przekształcić w wykonywalny kod bajtowy.
Linki zewnętrzne
- „Parsery, zasady Perla 6 i silnik gramatyki Parrot” . 2006-06-28.