ANTLR
Originalförfattare | Terence Parr och andra |
---|---|
Initial release | februari 1992 |
Stabil frisättning | 4.11.1 / 4 september 2022
|
Förvar | |
Skrivet i | Java |
Plattform | Cross-plattform |
Licens | BSD-licens |
Hemsida |
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:
- Groovy .
- Jython .
- Övervintra
- OpenJDK Compiler Grammar projekt experimentell version av javac -kompilatorn baserad på en grammatik skriven i ANTLR.
- Apex , Salesforce.coms programmeringsspråk. [ citat behövs ]
- Uttrycksutvärderaren i Numbers , Apples kalkylblad. [ citat behövs ]
- Twitters sökfrågespråk. [ citat behövs ]
- Weblogic-server. [ citat behövs ]
- Apache Cassandra . [ citat behövs ]
- Bearbetning . [ citat behövs ]
- JabRef . [ citat behövs ]
- Trino (SQL-frågemotor)
- Presto (SQL-frågemotor)
- MySQL Workbench
Ö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
- Coco/R
- DMS Software Reengineering Toolkit
- JavaCC
- Modulär syntaxdefinition Formalism
- Parboiled (Java)
- Analysera uttrycksgrammatik
- SableCC
Bibliografi
- Parr, Terence (17 maj 2007), The Definitive Antlr Reference: Building Domain-Specific Languages (1:a upplagan), Pragmatic Bookshelf , sid. 376, ISBN 978-0-9787392-5-6
- Parr, Terence (december 2009), Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages ( 1:a upplagan), Pragmatic Bookshelf , sid. 374, ISBN 978-1-934356-45-6
- Parr, Terence (15 januari 2013), The Definitive ANTLR 4 Reference (1:a upplagan), Pragmatic Bookshelf , sid. 328, ISBN 978-1-93435-699-9
Vidare läsning
- Parr, TJ; Quong, RW (juli 1995). "ANTLR: A Predicated-LL(k) Parser Generator". Programvara: Övning och erfarenhet . 25 (7): 789–810. CiteSeerX 10.1.1.54.6015 . doi : 10.1002/spe.4380250705 . S2CID 13453016 .