ANTLR (een afkorting van "ANother Tool for Language Recognition") is een parsergenerator die LL-parsers genereert. De software is van oorsprong ontwikkeld door Terrence Parr. Alhoewel er veel onderdelen zijn bijgedragen door anderen, is hij nog altijd de hoofdontwikkelaar.[2] De eerste versie werd uitgebracht in februari 1988. Versie 3 van ANTLR is uitgebracht onder BSD-licentie, voorgaande versies waren publiek domein-software.[3]

ANTLR
Ontwikkelaar(s) Terence Parr en anderen
Recentste versie 4.13.1 (4 september 2023)[1] Bewerken op Wikidata
Status Actief
Besturingssysteem Multiplatform
Geschreven in Java
Categorie Parsergenerator
Licentie(s) BSD-licentie van 3 clausules
Versiebeheer
Website (en) Projectpagina
Portaal  Portaalicoon   Informatica
Vrije software

ANTLR is geschreven in de taal Java. De software heeft als invoer de specificatie van een contextvrije grammatica in Extended Backus Naur Form (EBNF) . De generatie van de lexer en parser kan in talen als Ada95, ActionScript, C, C#, Java, JavaScript, Objective-C, Perl, Python, Ruby of Scala.[4]

Geschiedenis bewerken

ANTLR begon als een parsergenerator voor een afstudeerproject, destijds onder de naam YUCC. Na zijn afstuderen werd YUCC het onderwerp van de masterscriptie van Terence Parr en daaruit kwam ANTLR voort. Na zijn herschrijven heeft hij versie 1.0 bèta van ANTLR verspreid via nieuwsgroepen (comp.compilers). Deze versie bevatte echter nog te veel bugs waardoor de software niet bruikbaar was.

ANTLR versie 1.0 ontwikkelt Parr tijdens zijn promotie, herfst 1990. Hierbij voegde hij onder andere functionaliteit als het abstractesyntaxisboommechanisme, lexicale klassen, error-klassen en een geautomatiseerde foutherstelfunctie toe. De overdraagbaarheid en kwaliteit van de code zijn bij deze versie significant verbeterd.

Versie 2.0 van ANTLR verscheen in mei 1997. Nadat er geld was vrijgekomen was John Lilley destijds ingehuurd, en hij heeft een groot deel van de ontwikkeling voor zijn rekening genomen. ANTLR 2.0 bracht veel uitbreidingen en verbeteringen van bestaande concepten met zich mee, waaronder token streams, nongreedy subrules, heterogeneous trees, element options en XML-serialisatie.

Versie 3.0 werd elf jaar later, in oktober 2008, uitgebracht. In deze versie wordt gebruikgemaakt van een LL(*)-parser in plaats van een LL(k)-parser.[4] Nieuwe in deze versie zijn onder andere automatische backtracking mode, functionaliteit om abstracte syntaxisbomen te herschrijven, de StringTemplate engine en verbeterde foutenrapportage en foutenherstel.