Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax...
Transcript of Syntax von Softwaresprachen - userpages.uni-koblenz.desoftlang/oopmcourse/slides/synta… · Syntax...
Syntax von SoftwaresprachenOOPM, Ralf Lämmel Software Languages Team University of Koblenz-Landau
http://en.wikipedia.org/wiki/File:Brueghel-tower-of-babel.jpg
(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!
(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
(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?
(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
(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
(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.
(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 : '+' | '-' | '*' | '/';
(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
(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
(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
+
(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 : '+' | '-' | '*' | '/';
(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
(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;
(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”.
(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.
(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;
(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau
Mehr Ausdrucksformen
18
expression : ID | INT | '(' expression ') | expression op expression ; op : '+' | '-' | '*' | '/' | '==' | '!=' | '<' | '>' | '<=' | '>=' ;
(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
(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
(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;
}
(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?
(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’
(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.
(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
(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
(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.
(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”.
(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 : '+' | '-' | '*' | '/' | '==' | '!=' | '<' | '>' | '<=' | '<=';
(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?
Ein Objektmodell für Structo
(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
(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?
(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
(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