Gleitkommazahlen in Python
Gleitkommazahlen - korrekt / nicht korrekt dargestellt
Gleitkommazahlen kann man in Python auf vielerelei Weisen darstellen. Man kann dabei aber auch Fehler machen.
korrekt | nicht korrekt |
---|---|
2.0 002.0 2.200 2. .2 2e10 .2e01 2e-1 2e+1 2E1 |
e10 2e1.0 .e2 2.2.2 |
Die Sprache der Python-Gleitkommazahlen
Die Sprache der Python-Gleitkommazahlen lässt sich wie folgt mit Syntaxdiagrammen präzise beschreiben.
floatnumber:

pointfloat:

exponentfloat:

intpart:

fraction:

exponent:

digit:

Passend zu diesen Syntaxdiagrammen kann man die Sprache der Python-Gleitkommazahlen mit einer Grammatik präzisieren.
Grammatikregeln - in EBNF | Grammatikregeln - als Produktionen |
---|---|
floatnumber ::= pointfloat | exponentfloat |
floatnumber -> pointfloat floatnumber -> exponentfloat |
pointfloat ::= [intpart] fraction | intpart "." |
pointfloat -> fraction pointfloat -> intpart fraction pointfloat -> intpart "." |
exponentfloat ::= (intpart | pointfloat) exponent |
exponentfloat -> intpart exponent exponentfloat -> pointfloat exponent |
intpart ::= digit+ |
intpart -> digit intpart -> digit intpart |
fraction ::= "." digit+ |
fraction -> "." intpart |
exponent ::= ("e" | "E") ["+" | "-"] digit+ |
exponent -> "e" intpart exponent -> "E" intpart exponent -> "e" "+" intpart exponent -> "E" "+" intpart exponent -> "e" "-" intpart exponent -> "E" "-" intpart |
digit ::= "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9" |
digit -> "0" digit -> "1" digit -> "2" digit -> "3" digit -> "4" digit -> "5" digit -> "6" digit -> "7" digit -> "8" digit -> "9" |
Spracherkennung mit Hilfe von Produktionen
Wenn man mit dem Startsymbol beginnt, dann kann man durch einen sukzessiven Ersetzungsprozess jede Python-Gleitkommazahl mit den Produktionen der Grammatik ableiten.
floatnumber -> pointfloat -> fraction -> "." intpart -> "." digit intpart -> "." digit digit -> "." "1" digit -> "." "1" "4"
Aufgabe 1
Zeige entsprechend, dass die Zeichenkette 21.
mit den Ersetzungsregeln
erzeugt werden kann.