Code Monkey home page Code Monkey logo

compiler-campusminden / cb-vorlesung-master Goto Github PK

View Code? Open in Web Editor NEW
8.0 4.0 1.0 23.84 MB

Lecture "Concepts of Programming Languages" (M.Sc.)

Home Page: https://www.hsbi.de/elearning/goto.php?target=crs_1302203&client_id=FH-Bielefeld

License: Creative Commons Attribution Share Alike 4.0 International

Makefile 15.70% TeX 68.72% Java 7.56% ANTLR 4.39% Shell 0.35% Dockerfile 0.37% C 0.23% LLVM 1.90% Python 0.02% HTML 0.76%
antlr code-generation compiler-construction hacktoberfest interpreter llvm-ir oer teaching-materials teaching-website open-educational-resources

cb-vorlesung-master's People

Contributors

amatutat avatar bcg7 avatar cagix avatar dependabot[bot] avatar ironeer avatar jposselt avatar liketechnik avatar malt-r avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

ironeer

cb-vorlesung-master's Issues

CC: Logo kaputt?

Scheinbar funktioniert die alte Referenz auf das CC-Lizenz-Logo nicht mehr (richtig): Bei direktem Aufruf wird der CC-BY-SA-Button ohne Probleme angezeigt, eingebettet in eine Webseite dagegen nicht (mehr/immer).

Hier sind die aktuellen Links zu finden: https://creativecommons.org/mission/downloads/

Zu aktualisieren:

  • Readme.md
  • static/licenses.md
  • static/links.md
  • alle Dokumente (lecture, homework, admin)
  • ILIAS (Kursraum im offenen Bereich, Semester-Kursraum)

Planung Prüfungen

  • PO18: mdl. Prüfung: Mi, 07.02.
  • PO23: mdl. Prüfung als letzte Station der Parcour-Prüfung: Fr, 09.02.
  • ILIAS: Etherpad
  • Orga => Lernmodul
  • Discussions
  • Mail

Formatierung der Memoizing Erklärung verbessern

Achtung, mosern auf hohem Niveau :)
Die Erklärung des Memoizing ist super aber teilweise etwas unzugänglich aufgrund der vielen Abkürzungen und der handschriftlichen Darstellung des Pseudocodes auf dem Bild.
Beispiele:

  • def def()
  • def fun() (list für kotlin Programmierer fast das gleiche wie def def()^^)
  • fdef
  • fdecl
  • def decl()

[VL] Parse-Tree vs. AST - konkrete vs. abstrakte Syntax

In vielen Kursen wird zwischen "konkreter" und "abstrakter" Syntax unterschieden und sogar extra Grammatiken definiert. Damit hat man dann auch eine natürliche Unterscheidung zw. Parse-Tree und AST.

Zumindest sollten wir den Begriff "AST" nochmal präzise(r) definieren.

VL: Raw-Links ins Repo für Abbildungen in Challenges (und TLDR) nutzen

Das aktuelle Tooling analysiert alle Links und lokalen Abbildungen in den von einer Startdatei aus verlinkten Dokumenten und erstellt daraus entsprechende Anweisungen für das Makefile zum Kopieren und Einbinden der Dateien.

Bei Abbildungen und Links in den Meta-Daten (YAML-Header) funktioniert dieser Mechanismus nicht!

  • Abbildungen im YAML: Hier müssen absolute Links in das Repo auf die Raw-Datei für die Abbildungen eingesetzt werden.
  • Links im YAML: Die Verlinkung auf andere Markdown-Dateien funktioniert derzeit leider gar nicht, da die Dateien vom Tooling verschoben werden. Dazu müsste das Tooling erweitert werden.

Allerdings ist als nächster Schritt geplant, die Hugo-Templates durch Pandoc-Templates abzulösen, wodurch sich diese Probleme dann von selbst erledigen würden. (see cagix/pandoc-lecture#165)


Edit: Betrifft neben dem Feld challenges: auch tldr:.

Weiterentwicklung des Moduls (Master)

Das Modul wird im Winter 2024 vor allem als neues Wahlmodul mit 10 ECTS angeboten (doppelter Umfang).

Zusätzlich werden ab dem Winter 2027 Studierende teilnehmen, die dann bereits Compilerbau als Pflichtveranstaltung im Bachelor hatten.

Aktuell gehen wir in der VL klassisch die Bausteine der Pipeline durch und betrachten pro Block jeweils ein bis mehrere Ideen/Konzepte plus die Theorie dazu. Im Praktikum erstellt die Gruppe einen Java-Compiler und eine -VM. Am Ende des Semesters halten die Studierenden noch einen Vortrag zu einem fortgeschritteneren Thema.

Das Vorgehen skaliert recht gut, i.d.R. ist ein Thema äquivalent zu einer Sitzung, man kann Themen leicht austauschen. Nachteil ist, dass man einen deutlich langen theoretischen Vorlauf braucht, bis die Studis etwas praktisch umsetzen können und dass sie erst gegen Ende des Semesters eine lauffähige Pipeline in den Händen halten - Themen wie VM und Garbage Collection kommen sogar bisher nur am Rande vor.

Im (Online-) Buch und Kurs Essentials of Compilation wird das anders gemacht: Nach einer kurzen initialen Phase (Grammatik, Parsing) wird eine einfache komplette Pipeline für Integer-Expressions aufgebaut. In der folgenden Sitzung wird diese ergänzt um Variablen, danach Funktionen, Klassen, ... Dabei werden dann die jeweils relevanten Konzepte (Semantische Analyse, Typprüfung/-inferenz, Optimierung, Registerzuweisung, Garbage Collection, ...) schrittweise in den jeweiligen Lektionen untergebracht. (Video ACM SIGPLAN / ICFP'23)

Dadurch hat man jede Woche einen lauffähigen Interpreter/Compiler in der Hand und erweitert die Konzepte quer über die Compiler-Pipeline. Zusätzlich kommen hier Aspekte verschiedener Programmierparadigmen mit rein.

Das lässt sich gut mit dem Vorgehen im Kurs CS6120 an der CMU kombinieren. Hier halten die Studis zu verschiedenen fortgeschrittenen Themen einen eigenen Vortrag plus leiten die Sitzung/Diskussion und schreiben eine kurze Zusammenfassung als Blog. Mit dem Vorgehen von Essentials of Compilation könnte man so in den letzten zwei Dritteln des Semesters entsprechende ergänzende Vorträge einbauen, die so kontinuierlicher sind als die aktuellen Block-Vorträge am Semesterende.

Nach Möglichkeit würde ich gern schrittweise auch PLFA teilweise mit integrieren (theoretische Konzepte von Programmiersprachen) und EOPL und auch die Typen/Typsysteme (TPL: Benjamin Pierce). Das ist vermutlich eher perspektivisch zu sehen, wenn irgendwann Studis mit CB-Hintergrund kommen und man die Basics nicht nochmal komplett machen muss.

Ein weiterer interessanter Aspekt: Welche Sprache wollen wir parsen/interpretieren/kompilieren, und in welcher (Implementierung s-) Sprache soll es umgesetzt werden? Im Unterschied zum Bachelor-Modul sollte mehr Theorie (Grammatik, Parsing (LR/LALR), Optimierung) mit reinkommen, zusätzlich fortgeschrittenere Aspekte wie VM/Bytecode, Typ-Systeme, MLIR, ...

Auch interessant: CSE 40243 - Compilers and Language Design mit Online-Buch

Siehe auch Compiler-CampusMinden/CB-Vorlesung-Bachelor#243

[VL] Interpreter mit überladenen eval()-Methoden

Die Skizze des AST-Interpreters ist aktuell eine eval()-Methode mit einem switch/case-Konstrukt für den Typ des Knotens und entsprechendem Dispatch auf die Hilfseval-Methoden.

Es wäre gut, hier noch einen Ansatz zu zeigen, wo es überladene eval()-Methoden gibt, wo bereits beim Aufruf mit einem AST-Knoten die richtige Methode durch die Implementierungssprache ausgewählt wird.

Symboltabelle: Auflösung von Namen in Klassen korrekt?

Im Skript findet sich für die Auflösung von Namen dieser Code-Schnipsel:

if parentClazz != None: return parentClazz.resolve(name)
# ... or enclosing scope if base class
try: return enclosingScope.resolve(name)
except: return None # not found

Ist dies wirklich korrekt? In der Diskussion zum Beispiel für die Sprechstunde

    package a.b;

    import u.Y;

    class X extends Y {
        int f(int x) {
            int x,y;
            { int x; x - y + 1; }
            x = y + 1;
        }
    }

    class Z {
        class W extends X {
            int x;
            void foo() { f(34); }
        }
        int x,z;
        int f(int x) {
            int y;
            y = x;
            z = x;
        }
    }

kamen Zweifel auf?

[ASSIGNMENT] Blatt 01: Definition von "expression" präzisieren

Es gab in 2022 viel Diskussion um Edge-Cases und wie weit die Grammatik bzw. der Parser der Studis reichen soll. Die Frage ist berechtigt - man könnte entweder ganz genau Dinge beschreiben oder sogar mit einer Grammatik vorgeben (was nicht im Sinne der Aufgabe wäre!) oder über Testfälle gehen (was auch umständlich ist).

Letztlich sollten die Expressions "funktionieren": Binäre und unäre Expressions sowie die üblichen Vorrangregeln. Letztere könnte man ggf. noch verlinken ....

[VL] Error-Handling mit ANTLR

Das prinzipielle Error-Handling in ANTLR wurde demonstriert.

Es wäre schön, noch ein Beispiel für die eigene Fehlerbehandlung zu haben: Error-Listeners und Error-Nodes im Parse-Tree.

Einstieg in die Diskussion:

organisation: include post mortem

At the end of the semester, we should certainly organise a post mortem where the individual groups can share their experiences (and knowledge) with each other once again (suggestion by @jnamaral).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.