Das Video kommt von YouTube: erst beim Abspielen verbindet sich die Seite mit YouTube (Google).
EBNF (Erweiterte Backus-Naur-Form)
Das Wichtigste aus dem Video
Tipp auf eine Zeit – das Video springt genau dorthin.
Transkriptautomatisch erstellt · 111 Zeilen
- [Musik] willkommen bei hart und trocken wir sprechen über die bacchus neuer form wir beschäftigen uns damit wie ich die
- syntax einer programmiersprache beschreiben kann das heißt wie kann ich die korrekt geformten setzte in einer
- programmiersprache beschreiben die syntax an der sprache ist genau dieses regelsystem was mir sagt was ich so genannten wohlgeformten sätze sind und
- welche sätze nicht wohl geformt sind ein berühmtes beispiel dafür ist der satz farblos grüne ideen schlafen wütend der satz ist komplett unsinnig er ist
- aber wohl geformt grammatikalisch ist der satz in ordnung farblos grüne ideen schlafen wütend was ich gerne möchte ist ein regelsystem für eine
- programmiersprache was mir wie zb im deutsche sagt dieser satz ist wohl geformt oder dieser ausdruck in der programmiersprache ist wohl geformt die
- syntax von programmiersprachen ist vergleichsweise einfach natürliche sprachen sind viel schwerer zu beschreiben und weil programmiersprachen
- einfach zu beschreiben sind gibt es dafür auch eine vergleichsweise einfache form wir werden die so genannte erweiterte bacchus neuer form verwenden
- um zumindest einen teil der syntax von python zu beschreiben in der emf gibt es vier verschiedene wichtige bestandteile das erste sind die
- terminalen symbole dabei handelt es sich um zeichen oder auch zeichenketten die unterstrichen sind
- diese symbole heißen terminale symbole weil sie nicht mehr durch irgendetwas anderes ersetzt werden die nicht terminalen symbole sind zeichen oder
- zeichenketten die wir in spitze klammern schreiben zum beispiel hier nix oder zahl oder ausdrucke diese zeichen oder zeichenketten in spitzen klammern werden
- durch die regeln ersetzt in andere entweder nicht terminale symbole oder terminale symbole dann gibt es ein sogenanntes leeres
- zeichen dieses y in spitze klammern weil wir manchmal ein nicht terminale symbol einfach durch nichts ersetzen wollen dafür ist dieses zeichen speziell
- gedacht und dann gibt es regelt zeichen zum beispiel die zuweisung mit zwei doppel punkten und dem gleichheitszeichen es gibt ein roter
- zeichen dann geschäfte klammern davon auch eine variante mit einem pluszeichen eckige klammern und das sind jetzt in der bnf spezielle symbole mit denen wir
- die regeln definieren ein kleines beispiel macht klar wie die ebm es funktioniert ich habe eine regel für das nicht terminale symbolik six in
- spitze klammern und diese six kann ersetzt werden durch ein unterstrichen es klein ist also wirklich den buchstaben kley nix dann
- wieder das nicht terminale symbol und dann den buchstaben kleine y wenn ich hier eine zeichenkette habe dann kann ich an diese zeichenkette
- vorne und hinten an y hängen ich kann ein vorkommen von iks in spitzen klammern aber auch durch das leere symbol ersetzen einfach durch nichts
- ersetzen mit diesen regeln kann ich jetzt zeichenketten erzeugen ich starte mit dem nicht terminalen symbol und als
- erste regel wenn dich an ich hänge vorne einig sun und hinten an y dann wenn sich die regeln noch mal an und hänge wieder vorne nix und hinten
- ein y an und das mache ich mehrmals ich hänge jeweils vorne eins hinten eins y an bis ich irgendwann wenn ich einmal iks bzw y
- erarbeitet habe sage jetzt verwende ich die zweite regel und ersetze das nicht terminale symbolisch durch das leere symbol das heißt ich komme ich hier bei
- der zeichenkette xxx in x y y y wenn mal an in der emf gibt es mal kurz schreibweisen die es leichter machen die
- syntax eine programmiersprache zu beschreiben das erste ist dass oder der senkrechte strich bedeutet das entweder die linke oder die rechte seite von dem
- senkrechten strich angewendet werden kann hier kann ich sagen dass nichts terminale symbol grosics kann ersetzt
- werden durch klein xx klein y oder durch das leeres wohl diese eine regel sagt das gleiche aus wie die regel auf der vorherigen seite dann gibt es die option
- das sind eckige klammern vor und nach einem ausdruck das bedeutet dass das was in der eckigen klammern steht stehen kann oder nicht ich kann entweder
- ersetzen durch b oder durch y also durch nichts mit anderen worten wird entweder durch b ersetzt oder es wird durch exelon ersetzt die nächste
- kurz schreibweise ist die wiederholung für ein größer gleich null wenn ich den ausdruck b in spitzen klammern in eckige klammern setzte dann
- bedeutet das ich kann dieses b mehrmals wiederholen wobei mehrmals bedeutet entweder keinmal oder einmal oder zweimal dreimal viermal fünfmal und so
- weiter ich kann also entweder 0 x b verwenden das wäre diese situation oder ich verwende einmal b und habe dann aber immer noch hier den ausdruck a stehen
- das heißt ich kann die regeln noch mal anwenden um noch mal ein baby zu erzeugen und nochmal ein b und nochmal ein b manchmal möchte ich ausdrücken
- dass etwas wiederholt werden soll so oft wie ich möchte das ist aber mindestens einmal stehen muss das ist die wiederholung mit n
- größer gleich eins die funktioniert ganz analog zur wiederholung für n größer gleich null mit dem unterschied dass ich jetzt hier
- noch ein plus an die geschäfte klammer anhänge der unterschied zur regel gerade eben ist dass ich jetzt hier nachdem oder zeichen nicht mehr das
- leere symbol habe sondern ich habe ein b das heißt ich kann entweder durch b ersetzen oder durch abi und dann könnte ich hier das wiederum durch abe ersetzen
- noch mal durch a b und so kann ich eine lange reihe von b erzeugen mit dieser emf können wir jetzt eine syntax beschreibung des teils von
- preisen machen den wir schon kennen gelernt haben wir lassen dabei dass prinz statement aus und es gibt auch ein paar feinheiten
- die sich nur etwas umständlich beschreiben lassen würden die wir ebenfalls weglassen die wichtigen bestandteile aber können wir hier
- beschreiben wir beginnen mit der zahl eine zahl hier als nicht terminale symbol besteht aus hier einem optionalen teil und da steht
- entweder hier durch die senkrechte linie angezeichnet ein plus oder ein minus die unterstreichung macht klar dass wirklich ein plus als zeichen oder ein - als
- zeichen stehen soll dann folgt in geschäften klammern mit einem plus das heißt mindestens einmal wiederholt das nicht terminale symbol
- ziffer die ids an die zahl ist eine ziffernfolge hier beliebiger länge aber mindestens eine kiefer muss es sein und wir können ein plus oder minus davor
- schreiben ich habe jetzt hier darauf verzichtet ziffer auszuschreiben ziffer würde man definieren als null oder eins oder zwei oder und so weiter als
- nächstes folgte ausdruck ein ausdruck kann aus relativ unterschiedlichen dingen bestehen zum einen kann ein ausdruck einfach eine zahl sein so wie
- gerade eben definiert dann ein minuszeichen und ein bezeichne den wir gleich hier unten definieren werden dann eine runde klammer und dann ausdruck
- operator ausdruck und wieder eine schließende klammer damit möchten wir ausdruck plus ausdruck oder ausdruck - ausdruck schreiben können hiermit
- möchten wir zum beispiel xx schreiben können oder x-mal ich's dann kann eine ausdruck folgendes sein ein bezeichne runde klammer auf und dann optional
- dieser teil hier er besteht aus einmal ausdruck und dann hier mit geschäften klammern das heißt 0 x oder einmal oder zweimal und so weiter
- weitere ausdrücke das heißt ich kann mit dieser darstellungsweise beschreiben dass ich eine funktion aufrufen kann
- und diese funktion kann beliebig viele argumente haben zum schluss kann ein ausdruck auch ein bedingter ausdruck sein ein conditioner
- der bezeichnung den wir hier und hier gesehen haben wird definiert als ein buchstabe und dann beliebig oft wiederholt buchstaben oder zahlen
- das heißt ein bezeichnen kann etwas sein wie a11 bcc oder quadrat oder quadrat 2 was nicht erlaubt ist als bezeichnet ist 2x weil dieser bezeichnung mit einer
- zahl an fängt er muss aber mit einem buchstaben anfangen dann müssen wir noch wissen was ist mit diesen operatoren auf sich hat das sind einfach die
- grundrechenarten plus minus x und geteilt ich möchte also ausdruck mal ausdruck schreiben können in unserer mini version von preis nun
- haben wir auch funktionen verwendet eine funktion wird so definiert ich habe zunächst das schlüsselwort das was ich genau so hinschreiben muss dann kommt
- der name der funktion wir müssen uns gleich noch überlegen wie so ein name aussehen darf dann geht eine klammer auf es kommen die formalen parameter
- vielleicht wollen wir nix übergeben wie zb bei der quadrat funktion vielleicht wollen wir auch zwei argumente übergeben vielleicht wollen wir auch kein argument
- übergeben dann schließen wir mit der klammer und schreiben einen doppelpunkt was dann folgt ist der funktions rumpf der bei
- uns im moment sehr einfach aussieht ich habe genau vier leerzeichen und dann kommt das was wir hier funktionsraum nennen was er gleich noch definieren der
- name der funktion soll ein bezeichnet sein so wie wir ihn gerade definiert haben das heißt fängt an mit einem buchstaben und dann können zahlen oder
- buchstaben kommen die liste der formalen parametern verwendet wieder den trick von vorher optional kann folgendes kommen das heißt
- es kann auch leer bleiben einnahme und dann eine beliebige folge von comma name komma name komma name und so weiter der funktions rumpf sieht bei uns jetzt
- immer so aus wir haben hier das schlüsselwort return was er genau so schreiben müssen und dann kann nach dem return
- ein ausdruck folgen außerdem gibt es noch die bedingten ausdrücke in unserer sprache dieses conditional sieht so aus ausdruck schlüsselwort ein bursche
- ausdruck als ausdruck die bedeutung war wenn das hier war ist wird er als das hier aus wir haben dass sie immer im funktions rund verwendet liefere das
- zurück wenn dieser bursche ausdruck falsch ist dann wertet das hier aus der bursche ausdruck hier ist so definiert entweder das schlüsselwort true oder das
- schlüsselwort falls dies in den beiden vordefiniert dann klammer auf und hier in klammer zu ein ausdruck ein vergleich operator und ein ausdruck oder ich habe
- in runden klammern einen burschen ausdruck ein logischer operator und nochmal im bullishen ausdruck wir sehen jetzt schon das ergebnis von einem
- solchen burschen aus druck ist immer da oder forst und wir arbeiten dabei entweder direkt mit burschen ausdrücken auch hier das hier ist etwas was wahr
- oder falsch ist das hier ist etwas was wahr oder falsch ist und das kombiniert mit dem logischen operator mit und oder oder oder ich habe einen burschen
- ausdruck in runden klammern und schreibe ein ausrufezeichen davor das ist die negation wenn das hier war ist dann ist das hier falsch und umgekehrt
- die vergleichs operatoren sind test auf gleichheit ungleichheit kleiner größer kleiner gleich größer gleich an dieser stelle wichtig der test auf gleichheit
- wird mit zwei gleichheitszeichen geschrieben und das einfache gleichheitszeichen bedeutet immer eine zuweisung die logischen operatoren sind
- und und oder zum schluss wie sieht ein mini preisen programm aus das programm besteht aus einem ausdruck und dann einen zeilenumbruch und das ganze
- mindestens einmal ausdrücke sollen immer in einer neuen separaten zeile stehen um hier vielleicht noch mal zu zeigen was möglich ist mit diesen
- bedingten ausdrücken wir betrachten eine funktion namens f die drei argumente bekommt xyz und jetzt könnte zum beispiel sollen bedingte
- ausdruck der in dem return statement auftaucht so aussehen diese funktion liefert folgendes zurück wenn nix größer als y ist und y gleich
- ist wie z aus den gleichen wert bz hat dann liefere iks + y und sonst also wenn all das hier nicht gilt liefere z mit leerzeichen müssen wir ein bisschen
- aufpassen in python was wir damit meine sind zum einen ganz normale leerzeichen aber auch zeilenumbrüche oder tabulaturen im englischen sagt noch für
- all das zusammen white space in bezeichnen zahlen oder schlüsselwörtern darf ich keinen white space haben das heißt wenn ich eine variable
- bezeichnen möchte die quartieren und dann 1 abziehen heißt dann darf ich darin keinen white space unterbringen wenn bezeichne zahlen oder
- schlüsselwörter aufeinander folgen dann muss mindestens ein leerzeichen dazwischen stehen das heißt dieser ausdruck hier ist nicht korrekt weil ich
- an diesen stellen hier ein leerzeichen unterbringen es heute oder mindestens ein leerzeichen das heißt ich könnte hier oder hier auch mehrere leerzeichen
- unterbringen das ist unproblematisch es muss aber mindestens eins sein mit hilfe der emf kann ich jetzt kontext freisprachen definieren diese kontext
- freien sprachen zeichnen sich eben dadurch aus dass sie keinen kontext benötigen es sind einfache regeln mit denen ich entscheiden kann ob ein satz
- oder ein ausdruck grammatikalisch korrekt ist ich muss aber nicht wissen über was gesprochen wird mit anderen worten ich
- kann ein python programm schreiben was eine völlig unsinnige berechnungen anstellt ich kann aber sagen die syntax des programms ist korrekt
- die kontext freien sprachen habe einen großen vorteil ich kann dafür eine maschine bauen oder ich kann ein programm wiederum schreiben was in
- endlicher zeit entscheiden kann ob ein bestimmtes wort in der sprache enthalten ist oder nicht ich kann ein programm schreiben was
- entscheidet ob ein programm sind taktisch korrekt ist oder nicht solche kontext freien sprachen sind sagt man entscheid war noch ein sprach mittel was
- ich jetzt in der emf nicht untergebracht habe was aber sehr wichtig ist das sind kommentare ich kann in python programme hinweise einbauen an menschliche leser
- diese kommentare werden in der programmausführung ignoriert für die maschine für den rechner sind sie völlig irrelevant für menschliche leser sind
- sie aber sehr wichtig programme richtig zu kommentieren ein wichtiger bestandteil der programmierung kommentare in python
- beginnen mit einem gatter oder resch und alles was in dieser zeile nachkommt wird ignoriert hier in dem kleinen beispiel programm
- ist es so der erste kommentar fängt direkt hier an der nächste wiederum hier in der zeile kommt noch mal so einen hash vor
- das bedeutet aber nicht dass danach das ganze aufgelöst wird oder so was dass der kommentar in dieser stelle ist der ganze rest der zeile einfach einen
- kommentar hier ist ein kommentar über die folgende funktion fk funktion etwa berechnet das quadrat von +1 hier in klammern geschrieben damit klar ist dass
- man das quadrat von ausrechnet und dann +1 und nicht bloss 1 und dann das quadrat und dann folgen noch mal 2 kommentare die erst ein bisschen später
- beginnen in der zeile und aber für den rest der zahlen gelten zum einen die funktion heißt es von a und dann die funktion gibt aber mal +1 zurück die
- beiden letzten kommentare hier sind beispiele für kommentare wie man sie nicht machen sollte da wird nur das offensichtliche
- kommentiert ich sollte in den kommentaren nicht beschreiben was man sowieso direkt sieht nämlich hier da gibt es ein return und a mal a plus
- eins das sehe ich sofort was da passiert kommentare sind dann gut wenn sie ein bisschen was über die idee des programms erläutern
- das programm hier ist zu kurz um etwas tiefgründiges zu sagen aber einen kommentar zu einer funktion ist dann gut wenn gesagt wird wofür die funktion da
- ist wofür man sie anwenden kann wofür vielleicht auch nicht warum sie so gebaut wurde was sie für besonderheiten hat für welche argumente man sie nicht
- verwenden darf und so weiter richtig kommentieren ist eine aufwändige sache aber wenn ich im programm schreibe das irgendwann weg lege und dann nach
- einem jahr wieder drauf dann ist die gefahr groß dass sich das programm nicht mehr verstehe wenn ich keine kommentare reinschreiben
- deswegen ist das kommentieren sehr wichtig nicht nur damit andere das programm vielleicht lesen können sondern damit man es auch selbst noch versteht
- das war hart und trocken bmf [Musik]
Zum Nachlesen
Erweiterte Backus-Naur-FormDie Erweiterte Backus-Naur-Form, kurz EBNF, ist eine Erweiterung der Backus-Naur-Form (BNF), die ursprünglich von Niklaus Wirth zur Darstellung der Syntax …
Backus-Naur-FormDie Backus-Naur-Form oder Backus-Normalform (kurz BNF) ist eine kompakte formale Metasprache zur Darstellung kontextfreier Grammatiken (Typ-2-Grammatiken in …
SyntaxDie Syntax behandelt Sätze nicht nur als eine Aneinanderreihung von Wörtern, sondern arbeitet eine zugrundeliegende Satzstruktur heraus, die neben der …