Generator parserów

Generator parserów – program generujący analizator składniowy (parser) języka formalnego na podstawie jego opisu, najczęściej w postaci gramatyki. W modelu wzorcowym, generator otrzymuje opis języka w postaci gramatyki, generuje kod źródłowy, który po skompilowaniu daje parser, który z kolei otrzymuje na wejściu symbole leksykalne z leksera i produkuje drzewo wyprowadzenia lub rozpoznaje błędy składniowe.

Generator może pozwalać na dodatkowe informacje w opisie języka np.

  • łączność i pierwszeństwo operatorów – co pozwala używać prostszych i naturalniejszych gramatyk.
  • akcje semantyczne, czyli akcje jakie ma podejmować parser po rozpoznaniu pewnego fragmentu wejścia. Pozwala to generować kompilatory, translatory i interpretery, co przekształca generator parserów w generator kompilatorów (ang. compiler-compiler, compiler generator).

Rodzaje

Istnieją różne rodzaje parserów. Dany generator potrafi generować tylko niektóre typy parserów, zazwyczaj jeden, lub kilka podobnych. Popularniejsze typy generowanych parserów to np.: LALR, LR, GLR, LL. W zależności od typu parsera, akceptowane są odpowiednie klasy gramatyk.

Generatory można również podzielić ze względu na język programowania w którym jest generowany kod parsera. Niektóre generatory potrafią produkować kod w kilku (zazwyczaj podobnych) językach. Istnieją generatory, które tworzą kod będący jednocześnie analizatorem składniowym i leksykalnym.

Generatory parserów

  • ACCENT
  • AFLEX & AYACC
  • ALE
  • ANAGRAM
  • ANTLR
  • APG
  • Beaver
  • Bison
  • Bison for Eiffel
  • BTYACC
  • BYACC
  • Coco/R
  • COGENCEE
  • CppCC
  • CUP
  • DEPOT4
  • Elkhound
  • Essence
  • GEN
  • GOBO
  • GOLD
  • GPPG
  • Grammatica
  • GRDP
  • HAPPY
  • HOLUB
  • jacc
  • JavaCC
  • jay
  • Jell
  • JetPAG
  • LEMON
  • LISA
  • LLGEN
  • LRGEN
  • MinosseCC
  • MKS
  • More Than Parsing
  • ocamlyacc
  • PCYACC
  • PLY
  • PRECC
  • PROGRAMMAR
  • Rats!
  • RDP
  • SableCC
  • SLK
  • SmaCC
  • Spirit
  • T-Gen
  • TP LEX&YACC
  • TROOPER
  • VISUALPARSE++
  • Visual BNF
  • Yacc&Lex
  • YACC++
  • YooParse

Zobacz też