eigenschaften+von+ 3.kapitel …schramm/ads/files/kapitel03.pdf · 1 Übersicht 1. einführung 2....

67
Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm EIGENSCHAFTEN VON PROGRAMMIERSPRACHEN 3. Kapitel

Upload: buitruc

Post on 17-Sep-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

Algorithmen  &  Datenstrukturen  

Prof.  Dr.  Wolfgang  Schramm  

EIGENSCHAFTEN  VON  PROGRAMMIERSPRACHEN  

 

3.  Kapitel  

1  

Übersicht  

1.  Einführung 2.  Algorithmen 3.  Eigenschaften von

Programmiersprachen 4.  Algorithmenparadigmen 5.  Suchen & Sortieren 6.  Hashing 7.  Komplexität von Algorithmen 8.  Abstrakte Datentypen (ADT) 9.  Listen 10.  Bäume 11.  Graphen

2  

Lernziele  des  Kapitels  

¨  Sie  wissen,  was  in  der  InformaGk  unter  Sprache  verstanden  wird  und  kennen  wichGge  EigenschaLen  von  Sprachen.  

¨  Sie  können  einfache  Sprachen  mit  regulären  Ausdrücken  beschreiben.  

¨  Sie  wissen,  was  endliche  Automaten  sind,  wissen,  wie  sie  arbeiten  und  können  sie  zur  Beschreibung  einfacher  Sprachen  einsetzen.  

¨  Sie  wissen,  was  eine  GrammaGk  (in  der  InformaGk)  ist  und  können  einfache  Sprachen  mit  Hilfe  von  GrammaGken  beschreiben.  

2

3  

Inhalt  

o  Sprache/Programmiersprache  (Begriff)  o  EigenschaLen  von  Sprachen  o  Reguläre  Ausdrücke  o  Automaten  o  GrammaGk  o  Beschreibung  von  GrammaGkregeln  

¤  Reguläre  Ausdrücke  ¤  (E)  BNF  ¤  Syntaxdiagramme  

o  SemanGk  

4  

Sprachen  1/2  

o  Programmiersprache  ¤  vom  Rechner  verarbeitbare  Sprache.  

o  Programm  ¤  Darstellung  eines  Algorithmus  in  einer  Programmiersprache.  

o  Maschinensprache  ¤  Programmiersprache,  die  den  Befehlssatz  einer  Hardware  (CPU)  

widerspiegelt.  Bsp.:  0100  1001  1110  

¤  Auf  (der  speziellen  Hardware)  ausführbar.  ¤  Für  Menschen  nicht  (bzw.  schwer)  verständlich.  

5  

Sprachen  2/2  

o  Assembler  ¤  Maschinensprache  als  Befehlswörter.  

Bsp.:  load  4  reg1,  add  4  reg1,  jumpifless  87  ¤  Für  Menschen  nicht  bzw.  schwer  verständlich.  

o  Höhere  Programmiersprache  ¤  Programmiersprache,  die  rechnerunabhängig  ist.  

Bsp.:  Java  ¤  An  Algorithmen,  nicht  an  Maschinen  orienGert.  ¤  Für  Menschen  verständlich.  

…wenn auch besser als Maschinensprache

6  

Ausführung  von  Sprachen  1/2  

o  Maschinensprachen  (Assembler)  ¤  Vom  Rechner  ausführbar.  

o  Höhere  Programmiersprachen  1.  InterpretaGon  

Beispiele:  PHP  Perl  

010010 110111 100010 001111

Interpreter

Programm

Direkte Programmausführung

7  

Ausführung  von  Sprachen  2/2  

2.  Übersetzung  

Beispiele:  C  FORTRAN  Ada   010010

110111 100010 001111

Compiler

Programm

1.  Schritt: Übersetzen

2.  Schritt: Ausführen

010010 110111 100010 001111

Programm

8  

Compiler  

Quellprogramm

Folge von Token

Ableitungsbaum

Zielprogramm

Optimiertes Zielprogramm

Syntaktische Analyse

Lexikalische Analyse

Semantische Analyse

Optimierung

SCANNER

PARSER

Grammatik

Grammatik

9  

Eine  Sprache  exakt  und  formal  beschreiben  

o  Beispiel  Temperatur  ¤  Menschen:    27  °  ¤  Computer:    

n  eine  Folge  bestehend  aus  den  Zeichen  „2“,  „7“,  „°“  

n  Zur  InterpretaGon  durch  den  Computer  

 

„es ist 27 Grad“

Wie werden die Zeichen gruppiert? Worte 123, FCK, °°°00°°°, 5F, 6°K, -4K, -253°C, -460°F, 27°, 373K, 32°F

Welche Zeichen werden erwartet? Alphabet „2“, „7“, „°“, aber auch „0“, „8“, „9“, „C“, „F“, „K“, „-“

Welche Worte sind „sinnvoll“? Sprache

ü ð Grammatik!

10  

EigenschaLen  von  Sprachen  1/2  

Lexik:  BesGmmt  den  Auhau  der  Grundelemente  (z.B.  Worte  oder  Zahlen)  der  Sprache.  

Alphabet  (für  die  Deutsche  Sprache:  A,B,  ...,  Z,  a,b,  ...,  z,  Ä,  Ö,  Ü,ä,  ö,  u,  ß),  Sonderzeichen  (§,  [,  ],  €,  ...)  Satzzeichen  (.,  ?,  !,  ...)  Ziffern  (0,  ,1,  ...,  9)  Π  (das  griechische  PI)        lexikalisch  falsch  

   Syntax  /  Syntaxregeln:  

VorschriLen  über  den  korrekten  Auhau  von  Sätzen.  Es  wird  definiert,  wie  Sätze  als  Sequenzen  von  Grundbausteinen  zusammengesetzt  werden  können.  

Der  Elefant  aß  die  Erdnuss.    syntakGsch  korrekt  Der  Elefant  aß  Erdnuss  die.    syntakGsch  falsch  

11  

EigenschaLen  von  Sprachen  2/2  

SemanJk  Legt  die  Bedeutung  eines  syntakGsch  korrekten  Satzes  fest.    Der  Elefant  aß  die  Erdnuss.    semanGsch  korrekt  Die  Erdnuss  aß  den  Elefanten.    semanGsch  falsch    

PragmaJk:  Beschreibt  Beziehungen  der  Sprache  zum  subjekGven  Benutzer.  Zielt  ab  auf  Lesbarkeit,  Erlernbarkeit  u.ä.    Führende  Nullen  können  weggelassen  werden.  

12  

Alphabet  und  Sprache  in  der  InformaGk  1/3  

o  Im  Sinne  der  MathemaGk  und  InformaGk  ist  eine  Sprache  eine  Menge  von  Zeichenreihen.  Die  Sprache  wird  dabei  auf  Lexik  und  Syntax  reduziert.  Für  Lexik  wird  der  Begriff  Alphabet  verwendet.  

 

o  Ein  Alphabet  ist  eine  nicht  leere,  endliche  Menge  A  von  Zeichen  a  ∈  A.  A1  =  {A,  ...,  Z}      A2=  {a}  A3  =  {A,  ...,  Z,  a,  ...,  z,  0,  ...,  9}  A4=  {#,  0}     Lies: Element

von

13  

Alphabet  und  Sprache  in  der  InformaGk  2/3  

o  Die  Menge  aller  Zeichenreihen  A*  über  einem  Alphabet  ist  definiert  durch:  

¤  ε  ∈  A*  die  leere  Zeichenreihe  ist  eine  Zeichenreihe.  

¤  x  ∈A*,  a  ∈  A*  ⇒ x  ° a  ∈  A*  („°  “  ist  der  Verke}ungsoperator).  

¤  Andere  Zeichenreihen  gibt  es  nicht.  

ATA,  ATTTNBNM  ∈  A1*        a,  aa,  aaa  ....  ∈  A2*  

Paul,  Omega,  x12  ∈  A3*        #,  #0#000            ∈  A4*    

o  Eine  Sprache  L  (L,  wie  engl.  language)  ist  eine  Teilmenge  aller  Zeichenreihen  über  einem  Alphabet  A:  L  ⊂ A*  Deutsche  Sprache  ⊂ {A,  ...,  Z,  a,  ...,  z,  ß,  0,  ...,  9,  ?,  !,  ...}*  

Epsilon (leeres Wort)

14  

Alphabet  und  Sprache  in  der  InformaGk  3/3  

Wie  werden  die  Zeichenreihen  einer  besGmmten  Sprache  beschrieben?  

a)  Aufzählung  aller  Zeichenreihen  oder  Wörter,  die  zur  Sprache  gehören  (das  ist  nur  bei  endlichen  Sprachen  möglich!).  

L1  =   {a,  aaa,  aaaaa}  

b)  MathemaJsche  Charakterisierung  der  zur  Sprache  gehörenden  Wörter  als  Menge  (sog.  formale  Sprachen).  

L2  =   {an  |  n  ≥  3}  oder  L3  =   {an  bn  cn  |  n  ≥  1}    

c)  GrammaJken:  sind  eine  endliche  konstrukGve  Beschreibung  einer  im  allgemeinen  unendlichen  Menge.  

Damit  werden  Programmiersprachen  beschrieben.  

15  

Reguläre  Ausdrücke  

Reguläre  Ausdrücke  bieten  einfache  Operatoren,  um  KonstrukJonsregeln  (GrammaJk)    für  ZeichenkeWen  festzulegen:    o  Die  Auswahl  ermöglicht  die  Wahl  zwischen  2  AlternaGven:  

a  |  b  oder  auch  a  +  b  (eher  ungewöhnlich).  o  Die  Sequenz  (KonkatenaGon)  beschreibt  das  hintereinander  Schreiben:  ab.  

o  Die  IteraJon  ermöglicht  das  Wiederholen  von  Satzbausteinen:  a*  (0,  1  oder  n-­‐mal)  oder  a+  (1  oder  n-­‐mal)  ≡  aa*  .  

o  OpJonale  Satzbausteine:  a?  Abkürzung  für  a  |  ε  (eher  ungewöhnlich).    

o  Zusätzlich  besteht  die  Möglichkeit  der  Klammerung  zur  Strukturierung.  Ansonsten  gilt  „Punkt-­‐  vor  Strichrechnung“.  

o  Zeichenklassen:  Sta}  char  → a  |  b  |  c  |  etc.  schreibt  man  als  Abkürzung  auch  char  → [a  –  z].  

Prio

rität

Es gilt:

• V ist ein Alphabet.

• Ein Zeichen aus V (a, b) und ε ist ein regulärer Ausdruck.

16  

Reguläre  Ausdrücke  -­‐  Beispiele  

o  Binärzahlen  beginnen  mit  1,  danach  kann  eine  beliebig  lange  Folge  von  1  und  0  kommen:  

 1  (1  +  0)*  ⇒  1,  10,  1010,  100000001111  

o  Will  man  auch  noch  die  0,  als  einzige  mit  diesem  Symbol  startende  Zahl:  

 0  +  1  (1  +  0)*  ⇒ 0, 1,  10,  1010,  100000001111  

o  Bezeichner  einer  Programmiersprache  müssen  mit  einem  Buchstaben  beginnen,  dürfen  nach  dem  ersten  Buchstaben  aber  auch  Ziffern  enthalten:  

 (a  +  b  +  ...  +  z)  (a  +  b  +  ...  +  z  +  0  +  ...  +  9)*  ⇒ a,  ADS,  ma07,  u2  

o  Verwendung  von  Regulären  Ausdrücken  in  der  InformaGk:  

¤  Festlegung  von  Datenformaten  für  Programmeingaben.  

¤  Festlegen  von  Mustern  zum  Suchen  in  Texten.  

17  

Diskussion  

¨  Schreiben  Sie  eine  regulären  Ausdruck  für  die    „computer  aided  anything“-­‐  Abkürzungen  (CAD,  CAE,  …).    (Gleiche  Sprache  wie  der  Automat!)      

18  

Reguläre  Ausdrücke  vs.  Endliche  Automaten  

o  Hauptaspekt  ¤  Reguläre  Ausdrücke  beschreiben  den  Erzeugungsaspekt  von  regulären  

Sprachen.  ¤  Endliche  Automaten  beschreiben  den  AktzepGerungsaspekt  von  regulären  

Sprachen.  

o  Sprachumfang  ¤  „unsere“  Automaten  für  reguläre  Sprachen  ¤  „unsere“  GrammaGken  für  kontex�reie  Sprachen  

¤  Anmerkung      kontex�rei,  nicht  regulär    n  regulär  ⊂  kontex�rei  Bsp:    00  …  011  …  1  

n n

19  

Beispiel:  Automat  

q0

q2

q3

0

1

1

1

0

q1

1

0

20  

Automat:  DefiniGon  

o  Eine  endlicher  Automat  ist  ein  5-­‐Tupel    M  =  (Z,  V,  δ,  q0,  F)  

mit  ¤  Z:  Menge  von  Zuständen  ¤  V:  Menge  von  Zeichen:  Eingabealphabet  ¤  δ:  Z  ×  V  →  Z  ÜbergangsfunkGon  ¤  q0  ∈  Z  Anfangszustand  ¤  F  ⊆  Z  Endzustände  

¤  Anmerkung  n  Wir  betrachten  Automaten  nur  in  der  graphischen  Darstellung,  d.h.  δ  entspricht  beschriLeten  Kanten.  

21  

Beispiel:  Automat  

Anfangszustand

Zustand Endzustand

(hier nur einer)

Eingabealphabet Übergangsfunktion δ (q2, 1) = q3

q0

q2

q3

0

1

1

1

0

q1

1

0

22  

Vom  Automat  akzepGerte  Sprache  

AkzepGeren  o  Ein  Automat  akzepGert  ein  Zeichen,  wenn  es  vom  aktuellen  

Zustand  einen  mit  diesem  Zeichen  markierten  Pfeil  gibt.  ¤  D.h.  die  ÜberführungsfunkGon  ist  definiert.  

o  Ein  Automat  akzepGert  ein  Wort,  wenn  er  ¤  ausgehend  vom  Anfangszustand    ¤  nacheinander  jedes  Zeichen  des  Wortes  verarbeiten  kann  ¤  und  mit  dem  letzten  Zeichen  des  Wortes  einen  Endzustand  erreicht.  

o  Die  von  einem  Automaten  akzepGerte  Sprache  ist  die  Menge  aller  akzepGerten  Worte.  

23  

Beispiel:  akzepGerender  Automat  

q0 q1

1

q2 q3

1

1

1

0 0 0 Akzeptierte Sprache?

Akzeptierte Sprache: Worte mit gerader Anzahl von Nullen und Einsen

q0

0

24  

Beispiel:  Welche  Sprache  akzepGert  der  Automat?  

25  

Modellierung  mit  endlichen  Automaten  

26  

Endliche  Automaten  in  der  InformaGk  

27  

Wann  setzt  man  endliche  Automaten  ein?  

28  

Beispiel  für  den    Einsatz  eines  endlichen  Automaten  

29  

Ein  bekanntes  Problem  

30  

Wie  modellieren  wir  das  Problem?  

31  

Analyse  des  Problems  

32  

Modellierung  des  Problems  mit  UML-­‐Zustandsdiagrammen  

33  

Andere  Modellierung  des  Problems  mit  UML-­‐Zustandsdiagrammen  

34  

Diskussion  

¨  Partnerdiskussion  

¨  Schreiben  Sie  eine  Automaten,  alle  die  „computer  aided  anything“-­‐  Abkürzungen  (CAD,  CAE,  …)  akzepGert.    

¨  3  Min.  

35  

Noch  Fragen?  

35

36  

Beispiel:  GrammaGk  1/2  

 Eine  GrammaJk  beschreibt  den  korrekten  Auhau  von  Wörtern  einer  

Sprache.    Deutsche  Sätze  o  In  Prosa  

Deutsche  Sätze  bestehen  aus  Subjekt,  Prädikat  und  –  manchmal  –  aus  dem  Objekt.  

 

37  

Beispiel:  GrammaGk  2/2  

Deutsche  Sätze  o  Als  GrammaGk  

 Satz  à    Subjekt  Prädikat  Satz  à  Subjekt  Prädikat  Objekt  

Satz

Subjekt Prädikat Objekt

Satz

Subjekt Prädikat

Nacheinander-Nennung =

“oder”

38  

GrammaGk  (kontex�rei)  1/2  

Eine  GrammaJk  zur  Beschreibung  von  Syntax  ist  ein  4-­‐Tupel:  

G  =  (T,  N,  P,  S)  

T:  Menge  von  Token,  sog.  Terminalsymbole  (TS).  

N:  Menge  von  Nonterminalsymbolen  (NTS).  

P:  Menge  von  ProdukJonen  (oder  ProdukGonsregeln),  wobei  jede  ProdukGon  aus  einem  Nonterminalsymbol  (linke  Seite  der  ProdukGon)  einem  Pfeil  (→)  und  einer  Folge  von  Terminalsymbolen  und/oder  Nonterminalsymbolen    (rechte  Seite  der  ProdukGon)  besteht.  

S:  Ein  ausgezeichnetes  Nonterminalsymbol  -­‐  das  Startsymbol.  

39  

GrammaGk  (kontex�rei)  2/2  

Die  Sprache  L(G)  einer  GrammaJk  besteht  aus  allen  aus  dem  Startsymbol  S  abgeleiteten  Zeichenke}en  (Wörtern),  die  nur  Terminalsymbole  enthalten.  Ein  Wort  ist  eine  Folge  von  Terminalsymbolen,  die  durch  wiederholtes  Anwenden  von  Regeln  erzeugt  werden  kann,  wobei  das  Startsymbol  S  der  Ausgangspunkt  der  Erzeugung  ist.  

GrammaGken  werden  in  zweierlei  Hinsicht  genutzt:  

¤  Um  Worte  einer  Sprache  zu  erzeugen.  ¤  Um  festzustellen,  ob  ein  gegebenes  Wort  zur  Sprache  gehört.  

Es  gibt  verschiedene  Formalismen  zur  Beschreibung  von  GrammaGken:  

¤  Reguläre  Ausdrücke  (einfacher  Mechanismus,  nicht  für  alles  geeignet)  ¤  Backus  Naur  Form  (BNF).  ¤  Erweiterte  Bauckus  Naur  Form  (EBNF).  ¤  Syntaxdiagramme.  

Ableiten

Analysieren

40  

GrammaGk  –  Beispiel:  Telefonnummer  1/2  

o  Telefonnummern  (lokal)  ¤  Besteht  aus  beliebig  vielen  Ziffern  (mindestens  einer)  ¤  Beginnt  nicht  mit  „0“  

o  GrammaGk  (1.  Versuch)  ¤  T:    0,  1,  2,  3,  4,  5,  6,  7,  8,  9  ¤  N:  TN,  Nummer,  Ziffer  ¤  P:  TN  à  Nummer  

 Nummer  à  Nummer  Ziffer    Nummer  à  Ziffer    Ziffer  à  0    Ziffer  à  1    …    Ziffer  à  9  

¤  S:  TN  Problem: kann mit Null beginnen

Rekursion! erste Prod.: rekursiv

zweite Prod.: terminierend

41  

GrammaGk  –  Beispiel:  Telefonnummer  2/2  

o  GrammaGk  (2.  Versuch)  ¤  T:    0,  1,  2,  3,  4,  5,  6,  7,  8,  9  ¤  N:    TN,  Nummer,  Ziffer  ¤  P:  TN  à  NichtNull  Nummer  

 Nummer  à  Nummer  Ziffer    Nummer  à  ε    Ziffer  à  0    Ziffer  à  NichtNull    NichtNull  à  1    …    NichtNull  à  9  

¤  S:    TN   ü

42  

Darstellung  von  GrammaGken  

o  Wie  bisher  (siehe  vorige  Folien)  o  BNF,  Backus-­‐Naur-­‐Form  

¤  Idee:  maschinenlesbar  n  bessere  Unterscheidung  von  Terminalen/Non-­‐Terminalen  

n  „::=“  sta}  „à“  o  EBNF,  erweiterte  Backus-­‐Naur-­‐Form,  besser  lesbar  als  BNF  

¤  Idee:  Abkürzungen  für    n  OpGonalität  n Wiederholung  

o  Syntaxdiagramme  ¤  Idee:  grafische  Darstellung  

43  

Backus-­‐Naur-­‐Form  (BNF)  

o  Einfacher  Formalismus  für  die  Syntaxbeschreibung  von  Kunstsprachen  (=  Programmiersprachen).  

o  Dieser  Formalismus  hat  selbst  wiederum  eine  Syntax  –  man  spricht  deshalb  von  der  Metasyntax  der  BNF:  

¤  Ersetzungsregeln  in  der  Form:  linke  Seite  ::=  rechte  Seite  

¤  .    Markiert  das  Regelende  

¤  |    AlternaGve  

¤  (  )    Klammerung  zusammengehöriger  Symbole  

¤  <  >  schließen  Nonterminalsymbole  ein  

¤  Terminalsymbole  werden  (der  besseren  Kenntlichkeit)  oL  in  “  “  eingeschlossen  oder  feW  gedruckt  

44  

Backus-­‐Naur-­‐Form  (BNF)  -­‐  Beispiel  

o  Bezeichner  einer  Programmiersprache  müssen  mit  einem  Buchstaben  beginnen,  dürfen  nach  dem  ersten  Buchstaben  aber  auch  Ziffern  enthalten:  

 <Ziffer>  ::=  1|2|3|4|5|6|7|8|9|0.  

 <Buchstabe>  ::=  a|b|c|  ...  |z.  

 <Zeichenke}e>  ::=  <Buchstabe>  |  <Ziffer>  |      <Zeichenke}e>  <Ziffer>  |      <Zeichenke}e>  <Buchstabe>.  

 <Bezeichner>  ::=  <Buchstabe>  |  <Buchstabe>  <Zeichenke}e>.  

Rekursion

45  

Beispiel:  Bezeichner  

Ableitung  eines  Bezeichners  „a“  

Bezeichner

a

Buchstabe

Bezeichner

Buchstabe

Ziffer

Zeichenkette

a

3

b

Buchstabe

Zeichenkette

Ableitung eines Bezeichners „ab3“

46  

Ableitungsbaum  

o  Ein  Ableitungsbaum  ist  eine  graphische  Darstellung  einer  Ableitung  mit  folgenden  EigenschaLen:  ¤  Die  Wurzel  ist  das  Startsymbol.  ¤  Die  inneren  Knoten  sind  Nonterminalsymbole.  ¤  Die  Blä}er  sind  Terminalsymbole.  ¤  Hat  ein  Knoten  K  die  Kinder  (von  links  nach  rechts)  

X1,  X2,  …  XN  (Xi  sind  Terminale  oder  Nonterminale),  so  gibt  eine  Regel    K  ::=  X1  X2  …  XN  

n  Anmerkung  Das  generierte  Wort  erhält  man  durch  traversieren  nach  der  Inorder-­‐Strategie.  

47  

Beispiel:  GrammaGk  für  Ausdrücke  1/3  

Ausdrücke  ¤  sind  AddiGonen  oder  SubtrakGonen.  ¤  Bestehen  aus  zwei  Operanden  (ganzen  Zahlen),  

die  mit  „+“  oder  „-­‐“  verknüpL  sind.  ¤  Zahlen  haben  mindestens  eine  Stelle;  führende  Nullen  erlaubt.  

48  

Beispiel:  GrammaGk  für  Ausdrücke  2/3  

o  GrammaGk  ¤  N  =  {<Ausdruck>,  <Zahl>,  <Ziffer>,  <Operator>}  ¤  T  =  {0,  1,  …,  9,  +,  -­‐}  ¤  P  =  <Ausdruck>  ::=  <Zahl>  <Operator>  <Zahl>.  

 <Zahl>      ::=    <Ziffer><Zahl>  |          <Ziffer>.    <Ziffer>    ::=    1|2|3|4|5|6|7|8|9|0.    <Operator>  ::=  +|-­‐.      

¤  S  =  <Ausdruck>  Zwei <Zahl> Produktionen mit gleichem Non-Terminal

Auswahl je nach Ziel: ein- oder mehrstellige Zahl?

Non-Terminale in spitzer Klammer

Startsymbol muss Non-Terminal sein

Rekursion!

49  

Beispiel:  GrammaGk  für  Ausdrücke  3/3  

Ableitung  eines  Ausdruckes  „351+7“  

Ausdruck

Zahl Zahl Operator

Zahl

Zahl 3

5

1

7

+ Ziffer

Ziffer

Ziffer

Ziffer

50  

Erweiterte  Backus-­‐Naur-­‐Form  (EBNF)  

o  Erweitert  die  BNF  um  einige  Metasymbole,  um  die  Syntax  bequemer  bzw.  leichter  verständlich  zu  beschreiben.  

o  Es  gibt  viele  verschiedene  EBNFs  –  oL  gibt  es  für  die  Beschreibung  der  Syntax  einer  Programmiersprache  eine  eigene  EBNF  

o  Bekannteste  Erweiterung  der  Metasyntax  der  EBNF:  

¤  Ersetzungsregeln  in  der  Form:  linke  Seite  →  rechte  Seite  

¤  [  ]  opGonale  Klammerung  

¤  {  }  Wiederholungsklammerung  (0  -­‐  n  mal)  

¤  {  }+  Wiederholungsklammerung  (1  -­‐  n  mal)    

•  .    Markiert  das  Regelende  

•  |  AlternaGve  

•  (  )  Klammerung  zusammengehöriger  Symbole  

•  <  >  schließen  Nonterminalsymbole  ein  

•  Terminalsymbole  werden  (der  besseren  Kenntlichkeit)  oL  in  “  “  eingeschlossen  oder  feW  gedruckt  

Die (alten) BNF-Regeln gelten weiterhin.

51  

Erweiterte  Backus-­‐Naur-­‐Form  (EBNF)  –  Beispiel  

o  Bezeichner  einer  Programmiersprache  müssen  mit  einem  Buchstaben  beginnen,  dürfen  nach  dem  ersten  Buchstaben  aber  auch  Ziffern  enthalten:  

 <Ziffer>  ::=  1|2|3|4|5|6|7|8|9|0.  

 <Buchstabe>  ::=  a|b|c|  ...  |z.  

 <Bezeichner>  ::=  <Buchstabe>  {<Buchstabe>|  <Ziffer>  }.  

52  

Erweiterte  Backus-­‐Naur-­‐Form  (EBNF)  –  komplizierteres  Beispiel  1/3  

expression  → term  |  expression  add_op  term.  

term  →  factor  |  term  mul_op  factor.  

factor  →  number  |  variable  |  "("  expression  ")".  

add_op  →  "+"  |  "-­‐".  

mul_op  →  "*"  |  "/".  

number  →  digit  |  number  digit.  

digit  →  "0"  |  "1"  |  .  .  .  |  "9".  

variable  →  char  |  variable  char.  

char  →  "a"  |  .  .  .  |  "z".  

Einfache arithmetische Ausdrücke

53  

Erweiterte  Backus-­‐Naur-­‐Form  (EBNF)  –  komplizierteres  Beispiel:  Erweiterung  2/3  

expression  →  term  |  expression  add_op  term.  

term  →  factor  |  term  mul_op  factor.  

factor  →  [sign]  (  number  |  variable  |  "("  expression  ")"  ).  

sign  →  "+"  |  "-­‐".  

add_op  →  "+"  |  "-­‐".  

mul_op  →  "*"  |  "/".  

number  →  digit  |  number  digit.  

digit  →  "0"  |  "1"  |  .  .  .  |  "9".  

variable  →  char  |  variable  char.  

char  →  "a"  |  .  .  .  |  "z".  

Einfache arithmetische Ausdrücke (erweitert um Vorzeichen)

54  

Erweiterte  Backus-­‐Naur-­‐Form  (EBNF)  –  komplizierteres  Beispiel:  Umformung  3/3  

expression  →  term  {add_op  term}.  

term  →  factor  {mul_op  factor}.  

factor  →  [sign]  (  number  |  variable  |  "("  expression  ")"  ).  

sign  →  "+"  |  "-­‐".  

add_op  →  "+"  |  "-­‐".  

mul_op  →  "*"  |  "/".  

number  →  {digit}+.  

variable  →  {char  }+.  

digit  →  "0"  |  "1"  |  .  .  .  |  "9".  

char  →  "a"  |  .  .  .  |  "z".  

Einfache arithmetische Ausdrücke (umgeformt)

55  

Alte  EBNF  für  Java  

Von  James  Gosling,  Bill  Joy,  Guy  Steele,  Gilard  Bracha,  Alex  Buckley:  

h}p://download.oracle.com/javase/7/specs/jls/JLS-­‐JavaSE7.pdf  

DefiniGonszeichen  (zwischen  linker  und  rechter  Seite  eine  Prod.):  :  

o  Terminalsymbole:  fixed width  font  

o  Nonterminalsymbole:  italic  type    

o  DefiniGon  eines  Nonterminalsymbols  (in  der  1.  Zeile):  Name:  

o  AlternaGven:  ¤  jeweils  in  einer  neuen  Zeile  (auf  gleicher  Einrückungshöhe),  ¤  reicht  eine  Zeile  nicht  aus,  dann  wird  versetzt  eingerückt  (Fortsetzungszeile).  

¤  Steht  one  of  hinter  dem  Doppelpunkt,  dann  ist  eines  der  Terminalsymbole  der  folgenden  Zeile  auszuwählen.  

¤  Steht  but  not  auf  der  rechten  Seite  (also  ab  der  2.  Zeile)  vor  Terminalsymbolen  (es  können  auch  verschiedene  Angaben  über  boolesche  Operatoren  verknüpL  werden),  dann  sind  die  angegeben  Terminalsymbole  nicht  zulässig.  

¤  Steht  any  auf  der  rechten  Seite  vor  Nonerminalsymbolen  (in  normalem  SchriLtyp),  dann  ist  dies  eine  abkürzende  Schreibweise  für  besGmmte  Nonterminalsymbole.  

o  OpGonale  Angaben:  Gefgestelltes  opt  nach  dem  Symbol  

So  ist  die  Darstellung  in  der  Sprachbeschreibung.  

Die  Syntax  der  Zusammenfassung  (Kap.  18)  ist  als  „normale“  EBNF  

angegeben.  

56  

EBNF  für  Java  -­‐  Beispiel  

expression:  term expression add_op term

term:  factor term mul_op factor

factor:  sign opt Number sign opt Variable sign opt( expression )

add_op:  one  of  + -

sign:  one  of  + -

mul_op:  one  of  * /

number:  digit number digit

digit:  one  of  0 1 2 3 4 5 6 7 8 9

variable:  char variable char

InputCharacter:  

 UnicodeInputCharacter  but  not  CR  or  LF char:    

any letter

57  

Syntaxzusammenfassung  von  Java  

o  In  der  Java-­‐DokumentaGon  wird  die  Syntax  wie  oben  beschrieben  verwendet.  In  der  Syntaxzusammenfassung  gibt  es  wiederum  eine  eigene  EBNF.  

o  The  grammar  presented  piecemeal  in  the  preceding  chapters  is  much  be}er  for  exposiGon,  but  it  is  not  well  suited  as  a  basis  for  a  parser.  The  grammar  presented  in  this  chapter  is  the  basis  for  the  reference  implementaGon.    

o  The  grammar  uses  the  following  BNF-­‐style  convenGons:  o  [x]  denotes  zero  or  one  occurrences  of  x.    o  {x}  denotes  zero  or  more  occurrences  of  x.    o  x  |  y  means  one  of  either  x  or  y.  

58  

Syntaxdiagramme  

Graphische  Darstellung  der  Syntax;  Netzwerk,  das  besteht  aus:  ¤  Namen  von  Syntaxdiagrammen  ¤  Symbolen  eines  Alphabets  ¤  Pfeilen  

 Ziel:  Finde  einen  Weg  vom  Eingang  zum  Ausgang    

Metasymbole: Reihenfolge

Nichtterminalsymbole (NTS)

Terminalsymbole

59  

Syntaxdiagramme  -­‐  Grundtypen  

Sequenz Option

Alternative Wiederholung

60  

Syntaxdiagramme  –  Beispiel  1/2  

term

add_op expr term

expr

factor

mul_op term factor

term

number

variable

factor

) expr (

61  

Syntaxdiagramme  –  Beispiel  2/2  

term

add_op expr

factor

mul_op term

62  

Diskussion  

¨  Partnerdiskussion  

w  Schreiben  Sie  eine  GrammaGk  für  Gleitkommazahlen:    -­‐  mind.  eine  Vorkommastelle,    -­‐  mind.  eine  Nachkommastelle.  

w  Die  Regel    <Ziffer>  ::=  1|2|3|4|5|6|7|8|9|0.  können  Sie  verwenden,  ohne  Sie  aufzuschreiben.  

¨  8  Min.  

63  

Diskussion  

¨  Partnerdiskussion  

w  Leiten  Sie  Zahl  „2,81“  mit  der  GrammaGk  Ihrer  Nachbargruppe  ab!  

 

¨  2  Min.  

64  

Noch  Fragen?  

64

65  

SemanGk    

o  Zur  unmissverständlichen  Beschreibung  einer  Programmiersprache  am  besten:  mathemaGsche  Beschreibungsform.  

o  DenotaJonale  SemanJk:  Eine  Beschreibung  der  FunkGon  eines  Programms  durch  die  Festlegung  des  Ein-­‐/Ausgabeverhaltens  (beobachtbares  Verhalten).  

o  OperaJonale  SemanJk:  Beschreibung  der  Abfolge  der  einzelnen  Berechnungsschri}e  (schri}weise  Zustandsänderung),  die  bei  der  Auswertung  eines  Programms  anfallen.  

o  AxiomaJsche  SemanJk:  Ein-­‐  und  Ausgaben  erfüllen  besGmmte  Vor-­‐  und  Nachbedingungen.  Die  Vorbedingung  für  das  Gesamtprogramm  wird  durch  die  Programmausführung  in  die  Nachbedingung  überführt.  

66  

SemanGk  und  PragmaGk  -­‐  in  der  Praxis  

o  In  der  Praxis:  natürliche  Sprache,  auch  wenn  sie  MehrdeuGgkeiten  enthält.  

o  Man  unterscheidet:  

¤  staGsche  SemanGk  

¤  dynamische  SemanGk  

PragmaGk  o  Die  PragmaJk  legt  besGmmte  Arten  der  Nutzung  der  Programmiersprache  fest.  

Die  Konzepte  hierzu  kommen  von  außerhalb  der  Programmiersprache.  

o  Beispiele:  ¤  möglichst  gut  lesbare  Gestaltung  des  Quelltextes,  ¤  Namensvergabe  von  Variablen