Parsergenerator

Een parsergenerator, ook wel compiler compiler genoemd, is een programma dat helpt bij het implementeren van een compiler (of interpreter).

Op basis van een specificatie van een formele grammatica (vaak in BNF of EBNF) creƫert een parsergenerator een complete parser voor de gespecificeerde grammatica. Daarnaast bieden veel parsergenerators ook de mogelijkheid om, behalve een parser, nog andere functionaliteit te genereren die gebruikt wordt in compilers. Denk hierbij bijvoorbeeld aan een lexer of een vertaler die een concrete syntaxisboom naar een abstracte syntaxisboom vertaald.

Eigenschappen

Hoewel de werking en de functionaliteit van parsergenerators onderling enorm kan verschillen, hebben ze allemaal een aantal eigenschappen gemeen:

Specificatie
Ze werken op basis van een specificatie van een context-vrije grammatica. Deze wordt gespecificeerd door middel van een of andere variant van de EBNF-notatie.
Parser
Ze genereren broncode voor een werkende parser voor de gespecificeerde grammatica.
Syntaxisboom
De gegenereerde parser levert de resultaten van een parse op in de vorm van een syntaxisboom.

Acties

In het algemeen zijn parsergenerators onder te verdelen in twee soorten: generators die zogenaamde acties in de specificatie toestaan en generators waarbij dat niet toegestaan is.

Acties zijn fragmenten programmacode die aan een bepaalde productieregel gekoppeld worden. Als de parser een productieregel gebruikt om een fragment van de invoer te herkennen, wordt de gespecificeerde programmacode uitgevoerd.

Als een parsergenerator acties ondersteunt is het mogelijk om extra functionaliteit (bijvoorbeeld het bouwen van een syntaxisboom, typechecking of zelfs codegeneratie) in de specificatie op te nemen.

Enkele parsergenerators

In de onderstaande tabel worden enkele van de meer bekende parsergenerators vergeleken:

NaamSoort parserUitvoertaalActiesAanvullende functionaliteitWebsite
ANTLRLL(*)C, C++, C sharp, Java, Pythonja, Javalexerantlr.org
BisonLALR, GLRC, C++ja, C/C++-bison op www.gnu.org
Coco/RLL(k)C, C++, C sharp, Java en andereja, diverslexer, ondersteuning voor attribuut-evaluatieCoco/R op ssw.uni-linz.ac.at
GOLDLALRC, C++, C sharp, Java, Assembler en anderenee-gold op www.devincook.com
HappyLALR, GLRHaskellja, Haskell-Happy op haskell.org
JavaCCLL(k)Javaja, Javalexer, aanvullende treebuilderjavacc.org
SableCCLALRJava, C, C++, C sharp, OCaml, PythonneeLexer, CST->AST vertaler, treewalkerssablecc.org
YaccLALRCja, C--

Zie ook

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.