18
DER PARSER- GENERATOR ANTLR4 Eine praktische Einführung ins Sprachen-Basteln Fabian Deitelhoff FDeitelhoff http://www.fabiandeitelhoff.de [email protected]

Der Parser-Generator ANTLR4

Embed Size (px)

Citation preview

Page 1: Der Parser-Generator ANTLR4

DER PARSER-

GENERATOR ANTLR4Eine praktische Einführung ins Sprachen-Basteln

Fabian Deitelhoff

FDeitelhoff

http://www.fabiandeitelhoff.de

[email protected]

Page 2: Der Parser-Generator ANTLR4

Vorstellung

aus Dortmund (Aplerbeck)

08.05.2017 Der Parser-Generator ANTLR4 2

FDeitelhoff

http://www.fabiandeitelhoff.de

[email protected]

Doktorand, Autor, Blogger

Robotik, Programmiersprachen, Sprachdesign,

Programmieren Lernen, Programmierunterstützungen, IDEs, Eye-Tracking

Page 3: Der Parser-Generator ANTLR4

Formale Grammatik

• Formale Sprachen als Basis

• Sind abstrakte Sprachen

• Bestehen aus einer Menge von Wörtern über einem Alphabet

• „Gegensatz“ zu natürlichen Sprachen

Grundlage für den Compilerbau

Kontextfreie Grammatiken

08.05.2017 Der Parser-Generator ANTLR4 3

Page 4: Der Parser-Generator ANTLR4

08.05.2017 Der Parser-Generator ANTLR4 4

Page 5: Der Parser-Generator ANTLR4

𝐺 = (𝑉, ∑, 𝑃, 𝑆)

08.05.2017 Der Parser-Generator ANTLR4 5

G = (N, T, P, S)

Nichtterminalsymbole

Terminalsymbole

Startregel

Produktionen

Page 6: Der Parser-Generator ANTLR4

Formale Grammatik

08.05.2017 Der Parser-Generator ANTLR4 6

static void Main(string[] args)

Page 7: Der Parser-Generator ANTLR4

Parser-Generatoren

• Spezifikation zu Parser

• Spezifikation ist eine Grammatik

• Scanner zur Symbolerkennung wird ebenfalls erzeugt

• Eine breite Auswahl

• JavaCC

• Coco/R

• ANTLR

• yacc

08.05.2017 Der Parser-Generator ANTLR4 7

Page 8: Der Parser-Generator ANTLR4

ANTLR

• ANother Tool for Language Recognition

• Parser Generator

• Lesen

• Verarbeiten

• Ausführen

• Übersetzen

• Grundlage ist eine Grammatik

• Wird in eine Zielsprache übersetzt (Targets)

• Java, C#, Python, JavaScript, Typescript, Go, C++, Swift, …

08.05.2017 Der Parser-Generator ANTLR4 8

Page 9: Der Parser-Generator ANTLR4

ANTLR

• ANTLR ist von Terence Parr

„ANTLR v4 is exactly what I want in a parser generator, so I

can finally get back to the problem I was originally trying to

solve in the 1980s. Now, if I could just remember what that

was.”

Professor of computer science and analytics

(University of San Francisco)

08.05.2017 Der Parser-Generator ANTLR4 9

Page 10: Der Parser-Generator ANTLR4

Einsatzzwecke

• Domain Specific Languages (DSLs)

• General Purpose Languages (GPLs)

• Inselgrammatiken

• Spezifikationen in Code gießen

• …

Nicht alles lässt sich damit lösen!

08.05.2017 Der Parser-Generator ANTLR4 10

Page 11: Der Parser-Generator ANTLR4

Syntax von ANTLR4

08.05.2017 Der Parser-Generator ANTLR4 11

grammar Name;

nichtterminalA

: TOKEN1 nichtterminalB TOKEN2

;

Page 12: Der Parser-Generator ANTLR4

Demo

Verarbeiten eines Dateiformats

08.05.2017 Der Parser-Generator ANTLR4 12

Page 13: Der Parser-Generator ANTLR4

Ergebnisse nutzen

• ANTLR übernimmt für uns…

• … das Zerlegen der Eingaben (Tokenizer)

• … die Einhaltung einer Grammatik (Parser)

• … die Umwandlung in einen Baum (AST)

• … den Durchlauf durch diesen Baum

• … Fehlerbehandlung und Reporting

• Aber wie die Ergebnisse weiterverarbeiten?

08.05.2017 Der Parser-Generator ANTLR4 13

Page 14: Der Parser-Generator ANTLR4

AST-Durchlauf

• CSV Inhalt

Vorname;Nachname;Alter

"Fabian";"Deitelhoff";34

08.05.2017 Der Parser-Generator ANTLR4 14

Page 15: Der Parser-Generator ANTLR4

AST-Durchlauf

08.05.2017 Der Parser-Generator ANTLR4 15

• Tiefensuche (Depth-First) Durchlauf durch den AST

• Erst ganz links und dann von links nach rechts

Page 16: Der Parser-Generator ANTLR4

Listener

08.05.2017 Der Parser-Generator ANTLR4 16

Page 17: Der Parser-Generator ANTLR4

Parser

08.05.2017 Der Parser-Generator ANTLR4 17

Page 18: Der Parser-Generator ANTLR4

Vielen Dank für die Aufmerksamkeit!

Der Parser-Generator ANTLR4 1808.05.2017