• Keine Ergebnisse gefunden

EIGENSCHAFTEN  VON  PROGRAMMIERSPRACHEN

N/A
N/A
Protected

Academic year: 2021

Aktie "EIGENSCHAFTEN  VON  PROGRAMMIERSPRACHEN"

Copied!
67
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Algorithmen  &  Datenstrukturen   Prof.  Dr.  Wolfgang  Schramm  

EIGENSCHAFTEN  VON   PROGRAMMIERSPRACHEN    

3.  Kapitel  

(2)

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

(3)

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

(4)

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  

(5)

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.  

(6)

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

(7)

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

(8)

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

(9)

8  

Compiler  

Quellprogramm

Folge von Token

Ableitungsbaum

Zielprogramm

Optimiertes Zielprogramm Syntaktische Analyse

Lexikalische Analyse

Semantische Analyse

Optimierung

SCANNER

PARSER

Grammatik

Grammatik

(10)

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! ü

(11)

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  

(12)

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.  

(13)

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

(14)

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)

(15)

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.  

(16)

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].  

Pr io ri t

Es gilt:

• V ist ein Alphabet.

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

(17)

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.  

(18)

17  

Diskussion  

¨ 

Schreiben  Sie  eine  regulären   Ausdruck  für  die    „computer   aided  anything“-­‐  

Abkürzungen  (CAD,  CAE,  …).  

 

(Gleiche  Sprache  wie  der   Automat!)    

 

(19)

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

(20)

19  

Beispiel:  Automat  

q

0

q

2

q

3

0

1 1

1

0

q

1 1

0

(21)

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  

¤ 

q

0

 ∈  Z  Anfangszustand  

¤ 

F  ⊆  Z  Endzustände  

¤ 

Anmerkung  

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

(22)

21  

Beispiel:  Automat  

Anfangszustand

Zustand

Endzustand (hier nur einer)

Eingabealphabet Übergangsfunktion

δ (q2, 1) = q3

q

0

q

2

q

3

0

1 1

1

0

q

1 1

0

(23)

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.  

(24)

23  

Beispiel:  akzepGerender  Automat  

q

0

q

1

1

q

2

q

3

1

1

1

0 0

0

Akzeptierte Sprache? Akzeptierte Sprache:

Worte mit

gerader Anzahl

von Nullen und Einsen

q

0

0

(25)

24  

Beispiel:  Welche  Sprache  akzepGert  der  Automat?  

(26)

25  

Modellierung  mit  endlichen  Automaten  

(27)

26  

Endliche  Automaten  in  der  InformaGk  

(28)

27  

Wann  setzt  man  endliche  Automaten  ein?  

(29)

28  

Beispiel  für  den    Einsatz  eines  endlichen  Automaten  

(30)

29  

Ein  bekanntes  Problem  

(31)

30  

Wie  modellieren  wir  das  Problem?  

(32)

31  

Analyse  des  Problems  

(33)

32  

Modellierung  des  Problems  mit  UML-­‐

Zustandsdiagrammen  

(34)

33  

Andere  Modellierung  des  Problems  mit  UML-­‐

Zustandsdiagrammen  

(35)

34  

Diskussion  

¨ 

Partnerdiskussion  

¨ 

Schreiben  Sie  eine  Automaten,  

alle  die  „computer  aided  anything“-­‐  

Abkürzungen  (CAD,  CAE,  …)   akzepGert.  

 

¨ 

3  Min.  

(36)

35  

Noch  Fragen?  

35

(37)

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.  

 

(38)

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” =

(39)

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.  

(40)

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

(41)

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

(42)

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   ü

(43)

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  

(44)

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  

(45)

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

(46)

45  

Beispiel:  Bezeichner  

Ableitung  eines  Bezeichners  „a“  

Bezeichner

a Buchstabe

Bezeichner

Buchstabe

Ziffer Zeichenkette

a

3

b Buchstabe

Zeichenkette

Ableitung eines Bezeichners „ab3“

(47)

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)   X

1

,  X

2

,  …  X

N

 (X

i

 sind  Terminale  oder  Nonterminale),   so  gibt  eine  Regel  

 K  ::=  X

1

 X

2

 …  X

N  

n  Anmerkung  

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

(48)

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.  

(49)

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!

(50)

49  

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

Ableitung  eines  Ausdruckes  „351+7“  

Ausdruck

Zahl Operator Zahl

Zahl

Zahl 3

5

1

7

+ Ziffer

Ziffer Ziffer

Ziffer

(51)

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.

(52)

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>  }.  

(53)

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

(54)

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)

(55)

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)

(56)

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.  

(57)

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

(58)

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.  

(59)

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

(60)

59  

Syntaxdiagramme  -­‐  Grundtypen  

Sequenz Option

Alternative

Wiederholung

(61)

60  

Syntaxdiagramme  –  Beispiel  1/2  

term

add_op

expr term

expr

factor

mul_op

term factor

term

number variable factor

expr ) (

(62)

61  

Syntaxdiagramme  –  Beispiel  2/2  

term add_op expr

factor mul_op term

(63)

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.  

(64)

63  

Diskussion  

¨ 

Partnerdiskussion  

w  Leiten  Sie  Zahl  „2,81“  

mit  der  GrammaGk  

Ihrer  Nachbargruppe  ab!  

 

¨ 

2  Min.  

(65)

64  

Noch  Fragen?  

64

(66)

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.  

(67)

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  

Referenzen

ÄHNLICHE DOKUMENTE

I Das Prinzip ist die Abstraktion vom Programmzustand durch eine logische Sprache; insbesondere wird die Zuweisung durch Substitution modelliert.. I Der Trick behandelt

Alle übrigen Pfeile verbinden Kästchen, Kreise (Ellipsen), Verzweigungs-/Zusammenführungspunkte. 7) Von dem Eingangspfeil aus kann man jeden Kreis (Ellipse) und jedes Kästchen

2 aus konkreter Syntax einen Parser bauen, der Listen von Tokens in Ableitungsb¨ aume umwandelt; diese m¨ oglichst gleich als baumf¨ ormige Objektstrukturen der abstrakten

Es geht auch darum, noch anderen Akteuren außer dem Staat zu ermöglichen, eben- falls Lösungen für sich und ihre Gemeinschaften zu entwi- ckeln.. Es geht darum, dort präsent

Dennoch läßt sich der Schluß ziehen, daß das Wachstum der extraregionalen Industriegüter- exporte in Industrieländer während der Beobachtungsperiode nicht positiv mit dem Wachstum

Aspekte der Indikation für Psychotherapie bei Menschen mit intellektuellen Einschränkungen - Was ist relevant.. Sabine Luttinger, Psychologische Psychotherapeutin, niedergelassen

Strukturlaminat maya bronce JR250/6020 Hochglanzlaminat edelweiß JR250/6013 Strukturlaminat pale grain JR250/6017 desgl., ohne Unterteilung. Dekor

Es werden mehrere Kurse angeboten; die Einteilung erfolgt nach Anmeldung.. Sozialwissenschaftliche