Wir haben uns letzte Woche zusammengesetzt und die Restplanung vom Semester gemacht und dann habe
ich beschlossen, dass ich die Maschinennaheprogrammierung kurz unterbreche und die
Grammatiken heute vorziehe. Inhaltlich macht das überhaupt nichts aus, aber Grammatiken,
wenn Sie sich die alten Klausuren anschauen, sind durchaus klausurrelevant und werden die Woche auch
in den Übungen behandelt. Wir haben halt ein bisschen Probleme in dem Semester. Wir haben sowieso
eine Woche weniger als im Wintersemester und durch den verspäteten Anfang noch mal eine Woche verloren.
Insofern, wir sind eigentlich ganz gut im Zeitplan, aber ich dachte, es macht einen Sinn,
jetzt die Grammatiken einfach vorzuziehen, damit sie die Woche noch in den Übungen rankommen.
Und danach gehen wir wieder zurück zur maschinenahen Programmierung.
Ja, machen wir ein paar Formbemerkungen.
Wir haben einen Algorithmus, und der wird durch ein Programm realisiert,
und es ist in einer geeigneten Programmiersprache geschrieben.
Und natürlich sollten diese Programmiersprachen so nahe am Problem sein, wie möglich,
und so weit weg von der tatsächlichen Hardware.
Das heißt aber auch, dass wir dann eine Transformation machen müssen.
Und diese Programmiersprachen sind also formale Sprachen
im Unterschied zu natürlichen Sprachen wie Deutsch und Chinesisch.
Und zunächst einmal eine formale Sprache, die enthält Wörter,
die aus einer Menge von terminalen Symbolen, dem Alphabet,
durch Anwendung von Regeln, aus einer Menge von Regeln gebildet werden,
ausgehend von einem Stadtsymbol. Das schauen wir uns genauer an.
Und die Sprache L wird definiert durch eine formale Grammatik G.
Und die Frage, die wir uns jetzt dann stellen, ist, wenn wir ein Dokument sehen,
stellen wir uns die Frage, gehört dieses Dokument zu der Sprache L?
Wenn wir eine Syntaxanalyse des Deutschen machen, dann haben wir einen Satz
und fragen, ist das ein korrekter Satz im Sinne der Syntax des Deutschen?
Wenn wir ein Programm sehen, sagen wir, ist das ein korrektes Programm
im Sinne der Syntax von Java? Zunächst einmal, also nur die Frage,
ist es korrekt? Ja, nein, aber wir werden sehen, während der Analyse
bauen wir auch Strukturbäume auf. Erfassen wir die Struktur.
Nun ist es ja so, wenn Sie sich zum Beispiel mal den deutschen Satz überlegen,
die Angeklagte verurteilte das Gericht zu 15 Jahren Haft.
Dann ist es ein durchaus korrekter deutscher Satz.
Und es gibt natürlich eine Interpretation, die einen Sinn macht,
nämlich das Gericht verurteilte die Angeklagte und um das zu betonen,
habe ich dann gesagt, die Angeklagte Müller oder so, die Angeklagte Müller
verurteilte das Gericht zu 12 Jahren oder zu 15 Jahren.
Die Angeklagte Meier wurde freigesprungen.
Ich kann aber auch sagen, wenn ich keinen Kontextwissen habe,
Moment einmal, die Angeklagte Müller hat das Gericht verurteilt.
Auch diese Lesart wäre ja möglich. Im Sinne der Syntax des Deutschen ist es total okay.
Und nur durch Weltwissen, durch Kontextwissen können wir die eine Lesart
von der anderen unterscheiden. Bei einem Programm wäre das natürlich fatal,
wenn wir ein Java-Programm schreiben und bei der Analyse des Programmes
kämen jetzt zwei Lesarten raus, das sollte nicht sein.
Das heißt natürlich, diese Definition der Sprache muss viel, viel strikter sein
bei den formalen Sprachen.
Wir werden also jetzt sehen, werden das nicht allzu tief untersuchen,
aber wir werden sehen, wie kann ich eine Sprache, eine formale Sprache definieren
und wie kann ich das dann analysieren und während dem Analysieren einen Strukturbaum aufbauen.
Presenters
Zugänglich über
Offener Zugang
Dauer
01:26:32 Min
Aufnahmedatum
2011-07-19
Hochgeladen am
2018-05-07 14:57:11
Sprache
de-DE
Einführung in UNIX/Linux Einführung in die Programmierung mit Java Grundlagen der Rechnerarchitektur Programmiersprachen: von der Maschinensprache zur Objektorientierung Objektorientierte Programmierung Datenstrukturen und Algorithmen: Suchen und Sortieren, Listen, Keller, Bäume Internet, Verteilte Systeme