Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax...

35
Syntax von Softwaresprachen OOPM, Ralf Lämmel Software Languages Team University of Koblenz-Landau http://en.wikipedia.org/wiki/File:Brueghel-tower-of-babel.jpg

Transcript of Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax...

Page 1: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

Syntax von SoftwaresprachenOOPM, Ralf Lämmel Software Languages Team University of Koblenz-Landau

http://en.wikipedia.org/wiki/File:Brueghel-tower-of-babel.jpg

Page 2: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Quiz zur Motivation

Sind dies gültige Java-Fragmente?2*n + 12n + 1while true do { }int n = ;

Der Java-Compiler kann diese Frage beantworten.

Wie beantworten wir solche Fragen?... unter Verwendung einer Java-Implementation?... mit Papier und Bleistift?... mit einem eigenen Algorithmus?

2

Wir brauchen eine geeignete

Syntaxdefinition!

Page 3: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Was ist Java “konzeptionell”?

Java ist eine Programmiersprache.

Programmiersprachen sind Softwaresprachen.

Wichtige Aspekte solcher Sprachen:

Syntax (siehe auch “Formale Sprache”)

Welche Zeichenketten gehören zur Sprache?

Welche Regeln konstruieren diese Zeichenketten?

Semantik:

Bedeutung der Ableitungsbäume gemäß Regeln

(Bedeutung der Zeichenketten)

3

Page 4: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau 4

The term "software language" refers to artificial languages used in software development including general-purpose programming languages, domain-specific languages, modeling and meta-modeling languages, data models, and ontologies. Examples include general purpose modeling languages such as UML, but also domain-specific modeling languages for business process modeling, such as BPMN, or embedded systems, such as Simulink or Modelica, and specialized XML-based and OWL-based languages and vocabularies. The term "software language" also comprises APIs and collections of design patterns that define a language implicitly.

http://planet-sl.org/sle2012 Zugriff: 23.1.2012

Was sind Softwaresprachen?

Page 5: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Verwendung von Grammatiken für die Syntaxdefinition

Beispiele für arithmetische Ausdrücken + 12 * n - 1

Wir brauchen Regeln für folgende syntaktische Kategorien: Ausdrücke OperatorenBezeichnerKonstanten

5

Synonym: Produktion

Page 6: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Syntaxregeln

expression : ID | INT | expression op expression;

op : '+' | '-' | '*' | '/';

6

ID steht für die Menge aller Bezeichner. INT steht für die Menge aller Folgen von Ziffern.

Verweiseauf Nichtterminale

Terminale

DefinierteNichtterminale

Zur Trennung von Alternativen

Page 7: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Syntaxregeln

expression : ID | INT | expression op expression;

op : '+' | '-' | '*' | '/';

ID : 'a' | ... | 'z';

INT : '0' | ... | '41';

7

Wir geben später noch “bessere” Regeln an.

Page 8: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Backus Naur Form (BNF) (eine Form von Grammatiken)

Nichtterminal durch Menge von Alternativen definiertJede Alternative ist Sequenz von Symbolen

TerminaleNichtterminaleε ist die leere Sequenz.

8

expression : ID | INT | expression op expression;

op : '+' | '-' | '*' | '/';

Page 9: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Begriffe

Grammatik: Menge von Syntaxregeln

Grammatikdialekte und -notationen

BNF: Backus Naur Form

EBNF: Extended BNF Grammatiksymbole

Terminal: Zeichenkette

Nichtterminal: Platzhalter für eine Menge von Zeichenketten

Startsymbol: Ausgezeichnetes Nichtterminal

Ableitungsbaum:

Abeitung einer Zeichenkette aus Grammatikregeln

9

Page 10: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Ableitungsbaum für “n + 1”

10

expression

expression expressionop

ID INT

n 1+

expression : expression op expression;

expression : ID; op : ‘+’; expression : INT;

ID : ‘n’; INT : ‘1’;

Anwendung von Alternativen

Eingabe

Page 11: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Ableitungsbäume

Baumstruktur folgt den Regeln/Alternativen.

Blätter: Terminale

Die Liste aller Blätter ergibt den Eingabestring.

Andere Knoten: Nichterminale

Wurzel: Startsymbol der EBNF

11

Für einen gegebenen Nichtterminal-Knoten entsprechen die Folgeknoten immer genau den Symbolen aus einer

Alternative für das gegebenen Nichtterminal.

expression

expression expressionop

ID INT

n 1

+

Page 12: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Mehrere Ableitungsbäume für 2*n+1

12

expression

expressionop

+ INT

1

expression

expression expressionop

* ID

n

INT

2

expression

expression op

*expression

expression expressionop

+ INT

1

ID

n

*INT

2

expression : ID | INT | expression op expression;op : '+' | '-' | '*' | '/';

Page 13: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau 13

expression : term terms; terms : ε | plusminus term terms; plusminus : '+' | '-'; term : factor factors; factors : ε | timesdiv factor factors; timesdiv : '*' | '/'; factor : ID | INT;

expression : ID | INT | expression op expression; op : '+' | '-' | '*' | '/';

Schichtung der Ausdrucksformen

Herstellung der Eindeutigkeit

Page 14: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau 14

“Schichten” von Ausdrücken

factor: Nicht weiter zusammengesetzte Ausdrücke

term: Stärkere Bindung mit “*” und “/”

expression: Schwächere Bindung mit “+” und “-”

Mehrdeutigkeitsausschluss

Additionen können nicht Unterausdrücke von “*” sein.

Herstellung der Eindeutigkeit

expression : term terms; terms : ε | plusminus term terms; plusminus : '+' | '-'; term : factor factors; factors : ε | timesdiv factor factors; timesdiv : '*' | '/'; factor : ID | INT;

Page 15: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Das Parsing-Problem (Das Problem der syntaktischen Analyse)

Eingaben:

Grammatik G

Zeichenkette w

Ausgabe:

ja/nein: Ist w Element der durch G generierten Sprache?

Im “Ja” Fall: Ableitungsbaum

15

Es gibt viele solche Algorithmen.Siehe auch “Parsergenerator”, “Compilerbau”.

Page 16: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

EBNF: Extended BNF

Zusätzliche Symbolformen der EBNF Gruppierung von Symbolen ( ... ) Optionale Strukturen “?” (Postfix) Wiederholte Strukturen (0,1,... mal) “*” (Postfix) Wiederholte Strukturen (1,... mal) “+” (Postfix)

16

Diese Ausdruckskraft ist redundant.Verwende extra Nichtterminale.

Page 17: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Verkürzung der eindeutigen Syntax

17

expression : term (( '+' | '-' ) term)*; term : factor (( '*' | '/') factor)*; factor : ID | INT;

EBNF:Wiederholung von

Strukturen

EBNF:Gruppierung von

Symbolen

expression : term terms; terms : ε | plusminus term terms; plusminus : '+' | '-'; term : factor factors; factors : ε | timesdiv factor factors; timesdiv : '*' | '/'; factor : ID | INT;

Page 18: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Mehr Ausdrucksformen

18

expression : ID | INT | '(' expression ') | expression op expression ; op : '+' | '-' | '*' | '/' | '==' | '!=' | '<' | '>' | '<=' | '>=' ;

Page 19: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Eindeutige Grammatik für neue Formen

19

cexpression : aexpression rop aexpression;

rop : '==' | '!=' | '<' | '>' | '<=' | '>=';

aexpression : term (( '+' | '-' ) term)*;

term : factor (( '*' | '/') factor)*;

factor : ID | INT | '(' aexpression ')';

“comparison”expression

“arithmetic”expression

Klammern in der definierten Sprache.

EBNF:Wiederholung von

Strukturen

Klammern in der EBNF

Page 20: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Syntax von Softwaresprachen im verallgemeinerten Sinne

20

Sprachform Grammatikform

Menge von Zeichenketten BNF, EBNF, ...

Menge von BäumenBaumgrammatiken, XML

Schemata, Signaturen algebraischer Spezifikationen

Menge von Graphen Graphgrammatiken, Objektmodelle

Page 21: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Structo -- Beispielprogrammiersprache

Programme = AnweisungsblöckeEin einziger Datentyp: int.Variablendeklarationen (ohne Initialisierung).Anweisungsformen

ZuweisungIF-AnweisungWHILE-AnweisungRead/Write-Anweisung für I/O

Ausdrücke wie zuvor

21

{int n;read n;int r;r = 1;while (n > 0) {

r = r * n; n = n - 1;

}write r;

}

Page 22: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

(Fast) eindeutige EBNF für Structo

22

program : statements; statements : statement | '{' statement* '}'; statement : 'int' ID ';' | 'read' ID ';' | 'write' aexpression ';' | ID '=' aexpression ';' | 'if' cexpression statements ('else' statements)? | 'while' cexpression statements ;

Ausdrücke wie zuvor.

Knobelaufgabe:Warum ist die

Grammatik nicht ganz eindeutig?

Page 23: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Die Nichtterminale ID und INT

23

ID : ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9')* ;

INT : ('0'..'9')+ ;

Alle Zeichen zwischen ‘a’

und ‘z’

Page 24: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Was steht zwischen Bezeichnern, Zahlenkonstanten, Schlüsselwörtern und anderen Spezialsymbolen?

24

Konvention

Leerzeichen

Tabulatoren

Zeilenumbrüche

Dies kann auch in der Grammatik formalisiert werden.

Ebenso können Kommentare formalisiert werden.

Page 25: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

EBNF als Modellierungssprache

EBNF modelliert Sprachen (Syntax von Sprachen).

EBNF kann zu BNF reduziert werden.

(E)BNF ist streng mathematisch formalisiert.

(E)BNF ist “ausführbar”.

(E)BNF definiert Struktur der Ableitungsbäume.

25

Page 26: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Illustration: Ein Ausschnitt aus der Java-Syntax

26

Es wird wieder ein leicht verschiedener Grammatikdialekt benutzt.

Statement: Block assert Expression [ : Expression] ; if ParExpression Statement [else Statement] for ( ForControl ) Statement while ParExpression Statement do Statement while ParExpression ; try Block ( Catches | [Catches] finally Block ) switch ParExpression { SwitchBlockStatementGroups } synchronized ParExpression Block return [Expression] ; throw Expression ; break [Identifier] continue [Identifier] ;

StatementExpression ; Identifier : Statement

Page 27: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Illustration: Ein Ausschnitt aus der Cobol-Syntax

27

procedure-division

___________________________________________________________________________________________________________ | || >>__PROCEDURE__DIVISION_______________________________._________________________________________________> || | <____________ | || |__USING____data-name__|__| || >_______________________________________________________________________________________________________> || | <__________________________________________________ | || |__DECLARATIVES__.____section-header__.__use-statement__.__paragraphs__|__END__DECLARATIVES__.__| || >___sections___________________________________________________________________________________________>< ||___________________________________________________________________________________________________________|

_____________________________________________________________ | || >>__PROCEDURE__DIVISION_______________________________.___> || | <____________ | || |__USING____data-name__|__| || >___paragraphs___________________________________________>< ||_____________________________________________________________|

Es wird wieder eine visuelle Grammatiknotation verwendet.

Page 28: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Programmatische Darstellung von Ableitungsbäumen

Repräsentation

Objektmodell

Konstruktoren einer algebraischer Spezifikation

— beides abgeleitet direkt aus der Grammatik!

28

Wir können Terminale unrepräsentiert lassen, wenn sie keine Bedeutung innehaben.

Man benutzt auch den Begriff der “Abstrakten Syntax”.

Page 29: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Zur Erinnerung: die EBNF von Structo

29

program : statements; statements : statement | '{' statement* '}'; statement : 'int' ID ';' | 'read' ID ';' | 'write' expression ';' | ID '=' expression ';' | 'if' expression statements ('else' statements)? | 'while' expression statements ; expression : ID | INT | '(' expression ') | expression op expression; op : '+' | '-' | '*' | '/' | '==' | '!=' | '<' | '>' | '<=' | '<=';

Page 30: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

EBNF für die “wesentliche” (abstrakte) Struktur der Ableitungsbäume von Structo

30

[main] program : statement*; [intdec] statement : ID; [read] statement : ID: [write] statement : expression; [assign] statement : ID expression; [if] statement : expression statement* statement*; [while] statement : expression statement*; expression : ID | INT | expression op expression; op : '+' | '-' | '*' | '/' | '==' | '!=' | '<' | '>' | '<=' | '<=';

Regelbezeichnungen(als Referenzierungshilfe)

Knobelaufgabe:Welche Abweichungen gegenüber

der EBNF nehmen Sie wahr?

Page 31: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

Ein Objektmodell für Structo

Page 32: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Korrespondenz zwischen Objektmodellen und Grammatiken

Es gibt eine abstrakte Klasse für jedes Nichtterminal.

Es gibt eine konkrete Klasse für jede Alternative.

Die konkrete Klasse spezialisiert die Klasse für das Nichtterminal.

Komposition verweist auf die Klassen aus den Alternativen.

Kardinalitäten werden aus */+/? abgeleitet.

32

Page 33: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Konstruktoren einer algebraischen Spezifikation für Strukto

33

program : → statement

skip : → statement sequence : statement × statement → statement declare : ID → statement read : ID → statement write : expression → statement assign : ID × expression → statement if : expression × statement → statement while : expression × statement → statement

id : ID → expression int : INT → expression binary : op × expression × expression → expression

plus : → op minus : → op times : → op ...

Knobelaufgabe:Welche Abweichungen gegenüber der EBNF nehmen Sie wahr?

Page 34: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Korrespondenz zwischen algebraischen Spezifikationen und Grammatiken

Die Sorten korrespondieren zu den Nichtterminalen.

program, statement, expression, ...

Die Konstruktoren korrespondieren zu den Regeln.

Regel: [write] statement : expression;

Konstruktor: write: expression → statement

34

Page 35: Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax (siehe auch “Formale Sprache”) Welche Zeichenketten gehören zur Sprache? Welche

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Zusammenfassung

(Formale) Sprachen sind Mengen von Zeichenketten.

Grammatiken modellieren Sprachen.

EBNF ist ein Notation für Grammatiken.

Grammatiken sind mathematische Gebilde.

Grammatiken korrespondieren zu Objektmodellen.

… und zu