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:

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.

Pge-overview.svg

Linki zewnętrzne