ANTLR

ANTLR
Originalförfattare Terence Parr och andra
Initial release februari 1992 ; 31 år sedan ( 1992-02 )
Stabil frisättning
4.11.1 / 4 september 2022 ; 5 månader sedan ( 2022-09-04 )
Förvar
Skrivet i Java
Plattform Cross-plattform
Licens BSD-licens
Hemsida www .antlr .org

I datorbaserad språkigenkänning är ANTLR (uttalas antler ), eller ANother Tool for Language Recognition , en parsergenerator som använder en LL(*)- algoritm för analys. ANTLR är efterföljaren till Purdue Compiler Construction Tool Set ( PCCTS ), som först utvecklades 1989 och är under aktiv utveckling. Dess underhållare är professor Terence Parr vid University of San Francisco . [ citat behövs ]

Användande

ANTLR tar som indata en grammatik som specificerar ett språk och genererar som utdatakällkod för en igenkännare av det språket. Medan version 3 stödde generering av kod i programmeringsspråken Ada95 , ActionScript , C , C # , Java , JavaScript , Objective-C , Perl , Python , Ruby och Standard ML , är version 4 för närvarande inriktad på C#, C++, Dart , Java, JavaScript , Go , PHP , Python (2 och 3) och Swift .

Ett språk specificeras med hjälp av en kontextfri grammatik uttryckt med Extended Backus–Naur Form ( EBNF). [ citat behövs ] ANTLR kan generera lexers , parsers , tree parsers och kombinerade lexer - parsers . Parsers kan automatiskt generera analysträd eller abstrakta syntaxträd , som kan bearbetas ytterligare med trädparsers. ANTLR tillhandahåller en enda konsekvent notation för att specificera lexers, parsers och trädparsers.

Som standard läser ANTLR en grammatik och genererar en igenkännare för språket som definieras av grammatiken (dvs. ett program som läser en ingångsström och genererar ett fel om inmatningsströmmen inte överensstämmer med den syntax som anges av grammatiken). Om det inte finns några syntaxfel är standardåtgärden att helt enkelt avsluta utan att skriva ut något meddelande. För att göra något användbart med språket kan handlingar kopplas till grammatikelement i grammatiken. Dessa åtgärder är skrivna i det programmeringsspråk som igenkännaren genereras på. När igenkännaren genereras, bäddas åtgärderna in i igenkännarens källkod vid lämpliga punkter. Åtgärder kan användas för att bygga och kontrollera symboltabeller och för att skicka instruktioner på ett målspråk, i fallet med en kompilator. [ citat behövs ]

Förutom lexers och parsers kan ANTLR användas för att generera trädparsers. Dessa är igenkännare som bearbetar abstrakta syntaxträd, som automatiskt kan genereras av parsare. Dessa trädparsers är unika för ANTLR och hjälper till att bearbeta abstrakta syntaxträd. [ citat behövs ]

Licensiering

ANTLR 3 [ citat behövs ] och ANTLR 4 är fri programvara , publicerad under en BSD-licens med tre satser . Tidigare versioner släpptes som programvara för allmän egendom . Dokumentation, hämtad från Parrs bok The Definitive ANTLR 4 Reference , ingår i den BSD-licensierade ANTLR 4-källan.

Olika plugin-program har utvecklats för Eclipse-utvecklingsmiljön för att stödja ANTLR-grammatiken, inklusive ANTLR Studio , en proprietär produkt , såväl som "ANTLR 2" och "ANTLR 3"-plugins för Eclipse som finns på SourceForge . [ citat behövs ]

ANTLR 4

ANTLR 4 behandlar direkt vänsterrekursion korrekt, men inte vänsterrekursion i allmänhet, dvs grammatikregler x som hänvisar till y som hänvisar till x .

Utveckling

Som rapporterats på verktygssidan för ANTLR-projektet är plugin-program som möjliggör funktioner som syntaxmarkering, syntaxfelkontroll och kodkomplettering fritt tillgängliga för de vanligaste IDE:erna (Intellij IDEA, NetBeans , Eclipse , Visual Studio och Visual Studio Code ) .

Projekt

Programvara byggd med ANTLR inkluderar:

Över 200 grammatiker implementerade i ANTLR 4 är tillgängliga på GitHub . De sträcker sig från grammatik för en URL till grammatik för hela språk som C, Java och Go.

Exempel

I följande exempel beskriver en parser i ANTLR summan av uttryck som kan ses i form av "1 + 2 + 3":

 
 
 
    
 
 
    
 
 
      
 
 
    
 
    
 
 
      
 
  
  
   // Vanliga alternativ, till exempel målspråksalternativen  {  language  =  "  CSharp";  }  // Följt av parserklassen  SumParser  utökar  Parser  ;  optioner  {  k  =  1  ;  // Parser Lookahead: 1 Token  }  // Definition av en uttryckssats  :  INTEGER  (  PLUS  ^  INTEGER  )  *  ;  // Här är Lexer  -klassen  SumLexer  utökar  Lexer;  optioner  {  k  =  1  ;  // Lexer Lookahead: 1 tecken  }  PLUS  :  '+'  ;  DIGIT  :  (  '0'  ..  '9'  )  ;  HELTAL  :  (  SIFRA  )+  ; 

Följande lista visar anropet av parsern i ett program:

  
 
     
     

  TextReader-  läsare  ;  // (...) Fyll TextReader med tecken  SumLexer  lexer  =  new  SumLexer  (  reader  );  SumParser  parser  =  ny  SumParser  (  lexer  );  parser  .  uttalande  (); 

Se även

Bibliografi

Vidare läsning

externa länkar