Giter Club home page Giter Club logo

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

View Code? Open in Web Editor NEW
1.0 3.0 0.0 28.22 MB

Lecture "Compilerbau" (B.Sc.)

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

License: Creative Commons Attribution Share Alike 4.0 International

Dockerfile 0.70% Makefile 29.85% TeX 40.53% Java 14.37% C 0.44% LLVM 3.61% Python 0.04% ANTLR 8.34% HTML 1.47% Shell 0.66%
antlr code-generation compiler-construction hacktoberfest interpreter llvm-ir oer teaching-materials teaching-website open-educational-resources

cb-vorlesung-bachelor's Introduction

archetype title
home
IFM 5.21: Compilerbau (Winter 2023/24)

{width="80%"}

Kursbeschreibung

Der Compiler ist das wichtigste Werkzeug in der Informatik. In der Königsdisziplin der Informatik schließt sich der Kreis, hier kommen die unterschiedlichen Algorithmen und Datenstrukturen und Programmiersprachenkonzepte zur Anwendung.

In diesem Modul geht es um ein grundlegendes Verständnis für die wichtigsten Konzepte im Compilerbau. Wir schauen uns dazu relevante aktuelle Tools und Frameworks an und setzen diese bei der Erstellung eines kleinen Compiler-Frontends für Mini-Python ein.

Überblick Modulinhalte

  1. Lexikalische Analyse: Scanner/Lexer

    • Reguläre Sprachen
    • Generierung mit ANTLR
  2. Syntaxanalyse: Parser

    • Kontextfreie Grammatiken (CFG)
    • LL-Parser (Top-Down-Parser)
    • Generierung mit ANTLR
  3. Semantische Analyse: Attributierte Grammatiken und Symboltabellen

    • Namen und Scopes
    • Typen, Klassen, Polymorphie
  4. Zwischencode: Intermediate Representation (IR), Builder

  5. Interpreter: AST-Traversierung

Team

Kursformat

Vorlesung (2 SWS) Praktikum (2 SWS)
Di, 08:00 - 09:30 Uhr Fr, 16:15 - 17:45 Uhr
online/C1 online/D328

Durchführung als Flipped Classroom (Carsten) bzw. Vorlesung (BC): alle Sitzungen online/per Zoom (Zugangsdaten siehe ILIAS)

Prüfungsform, Note und Credits

Parcoursprüfung, 5 ECTS

  • unbenotet: Alle vier Übungsblätter ausreichend bearbeitet und Ergebnisse vorgestellt/diskutiert
  • unbenotet: Aktive Teilnahme an den drei gemeinsamen Terminen mit der University of Alberta (Edmonton)
  • benotet (30%): Vortrag: Vorstellung der Ergebnisse der freien Aufgabe, 30 Minuten Dauer
  • benotet (70%): Mündliche Prüfung

Gesamtnote: 30% Vortrag plus 70% mdl. Prüfung

Materialien

Literatur

  1. "Compiler: Prinzipien, Techniken und Werkzeuge". Aho, A. V. und Lam, M. S. und Sethi, R. und Ullman, J. D., Pearson Studium, 2008. ISBN 978-3-8273-7097-6.

  2. "Crafting Interpreters". Nystrom, R., Genever Benning, 2021. ISBN 978-0-9905829-3-9.

  3. "Introduction to Compiler Design". Mogensen, T., Springer, 2017. ISBN 978-3-319-66966-3. DOI 10.1007/978-3-319-66966-3.

  4. "The Definitive ANTLR 4 Reference". Parr, T., Pragmatic Bookshelf, 2014. ISBN 978-1-9343-5699-9.

Tools

Fahrplan

Vorlesung

Woche Datum Themen Lead Bemerkung
41 Di, 10.10. Orga (Zoom) || Überblick | Sprachen | Anwendungen Carsten, BC
42 Di, 17.10. Reguläre Sprachen BC
42 Fr, 20.10. (Praktikum) Lexer mit ANTLR Carsten
43 Di, 24.10. CFG BC
43 Fr, 27.10. (Praktikum) LL-Parser BC
44 Mo, 30.10., 17:00-18:00 Uhr Edmonton I: ANTLR + Live-Coding (CA) online bzw. H10
44 Di, 31.10. Parser mit ANTLR | Grenze Lexer und Parser Carsten
45 Di, 07.11. Überblick Symboltabellen | Symboltabellen: Scopes | Symboltabellen: Funktionen | Symboltabellen: Klassen Carsten B01
46 Di, 14.11. Attributierte Grammatiken BC
46 Fr, 17.11. (Praktikum) Syntaxgesteuerte Interpreter | AST-basierte Interpreter 1 | AST-basierte Interpreter 2 Carsten
47 Di, 21.11. Attributierte Grammatiken BC B02
48 Di, 28.11. Überblick Zwischencode | Mini-Python (Builder) BC
48 Di, 28.11., 18:00-19:00 Uhr Edmonton II: Vortrag Mindener Projekte (DE)
49 Mi, 06.12., 18:00-19:00 Uhr Edmonton III: Vortrag Edmontoner Projekte (CA) B03
50 Di, 12.12. Freies Arbeiten / B03 (Nachfrist) Carsten
51 Di, 19.12. B04 Carsten, BC
02 Di, 09.01. Freies Arbeiten Carsten
03 Di, 16.01. Freies Arbeiten Carsten
04 Mo, 22.01., 11:45-13:15 Uhr, B70 Besuch von Prof. Nelson Amaral in Minden (Vortrag und Gespräch mit Studierenden), B70 BC
04 Di, 23.01. Vortrag: Termine siehe Etherpad Carsten, BC
04 Fr, 26.01. (Praktikum) Vortrag: Termine siehe Etherpad Carsten, BC
06 Do, 08.02. Mündliche Prüfung: Termine siehe Buchungsliste Carsten, BC

[Bitte geben Sie uns Feedback: Nehmen Sie bitte an der anonymen Umfrage zu Compilerbau (Bachelor) teil.]{.alert}

Praktikum

Woche Blatt Abgabe ILIAS Vorstellung Praktikum
45 B01: Grammatik, ANTLR, AST (Mini-Python) Fr, 10.11., 16:00 Uhr (Link) Fr, 10.11.
47 B02: AST und Symboltabellen (Mini-Python) Fr, 24.11., 16:00 Uhr (Link) Fr, 24.11.
49 B03: Interpreter (Mini-Python) Fr, 08.12., 16:00 Uhr (Link) (Nachfrist: Di, 12.12., 08:00 Uhr) Fr, 08.12. (Nachfrist: Di, 12.12., Vorlesungsslot)
51 B04: Builder und freie Aufgabe (Mini-Python) Di, 19.12., 08:00 Uhr (Link) Di, 19.12. (Vorlesungsslot)
04 Freie Aufgabe (Mini-Python) Di, 23.01., 08:00 Uhr (Link) Di, 23.01. (Vorlesungsslot) / Fr, 26.01. (Praktikum)

Förderungen und Kooperationen

Kooperation mit University of Alberta, Edmonton (Kanada)

Über das Projekt "We CAN virtuOWL" der Fachhochschule Bielefeld ist im Frühjahr 2021 eine Kooperation mit der University of Alberta (Edmonton/Alberta, Kanada) im Modul "Compilerbau" gestartet.

Wir freuen uns, auch in diesem Semester wieder drei gemeinsame Sitzungen für beide Hochschulen anbieten zu können. (Diese Termine werden in englischer Sprache durchgeführt.)

::: slides

LICENSE

Unless otherwise noted, this work is licensed under CC BY-SA 4.0. :::

cb-vorlesung-bachelor's People

Contributors

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

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

cb-vorlesung-bachelor's Issues

[VL] Fix landing pages

Im Hugo-Re-Learn-Theme 5.x sind die Chapter so organisiert, dass der Titel als H1-Header genutzt wird.

  • Baue alle _index.md so um, dass keine H1-Header mehr existieren
  • Nutze bei Bedarf neben title auch menuTitle
  • Ziehe hidden: true auf die letzte Zeile (davor eine Leerzeile), um es besser sichtbar zu machen
  • Die Home-Page (oberstes _index.md) ist nicht hidden
  • Orga und Assigments bekommen ein weight: 0

siehe Programmiermethoden-CampusMinden/Prog2-Lecture#592

[Makefile] Fix Makefile: Exclude "index.md", but also "index.ba.md" and "index.ma.md"

"index.md" und "_index.md" werden ignoriert, wenn Foliensätze gebaut werden sollen. Durch die Mehrsprachigkeit werden aus den einfachen Index-Dateien welche mit doppelter Endung ("index.ba.md" and "index.ma.md"). Hier klappt das Ignorieren beim Bauen der Folien noch nicht.

SLIDES_SINGLE_MARKDOWN_SOURCES = $(filter-out $(addsuffix %, $(SLIDES_EXCLUDE_DIRS)), $(shell find $(SRC_DIR) -type f -iname '*.md'  ! -iname '*index.md' ! -iname 'tldr.md' ! -iname 'outcomes.md'))

muss angepasst werden ...

[BUG] Fix Groß-/Kleinschreibung in Bib-File

Für die deutschsprachigen Einträge wird nur das erste Word des Titels korrekt im Literaturverzeichnis wiedergegeben, die restlichen Wörter werden alle (teilweise fälschlich) klein geschrieben.

Change Repo-Name?

Wir haben unsere Organisation "Compilerbau" und das Vorlesungs-Repo "Lecture" genannt. Das passt auch eigentlich ganz gut.

Aber mir ist kürzlich aufgefallen, wenn Studis sich das Repo forken, dass dann der Fork im Studi-Repo auch einfach nur "Lecture" heisst, was nicht besonders aussagekräftig ist.

Mein Vorschlag ist, dass wir den Namen für das Lecture-Repo nochmal überdenken. Vielleicht "CB-Lecture"? Und, damit es keine Doppelungen gibt, den Namen der Organisation anpassen: "Compilerbau @ FHB" (oder so ähnlich, falls das technisch geht).

@bcg7 @AMatutat Was denkt Ihr?

Splitten der Veranstaltung vorbereiten

Die aktuelle Veranstaltung soll in zwei neue Module geteilt werden: Ein eher praktisch orientiertes, Front-End-lastiges Wahlfach im Bachelor und ein eher forschungsnahes Modul im Master.

Hierzu muss ein Konzept erstellt werden:

  • Wie kann die Transition technisch gemacht werden?
  • Wie können wir die zu verschiebenden Teile markieren und darüber diskutieren?
  • Welche Teile gehen in den Bachelor, welche bleiben im Master?
  • Welche Teile kommen ergänzend neu im Master dazu? Was treibt die Leute aktuell auf den Konferenzen um?

Update: Forken des Repos: 1x neues BA-Repo, 1x neues MA-Repo, 1x temporäres MA-Repo; dieses Repo archivieren
Forken geht aber nur in einen anderen Name-Space und auch nur ohne Umbenennung. Also doch der Weg über git clone, git remote und git push?

(follow-up to https://github.com/Compilerbau/we-can-virtuowl/issues/2)

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

Beschleunigung des GH-Workflows: Nutzung der GH-Registry oder Bauen direkt auf dem Runner?

aus #16 (comment): ich hab grad noch ne andere (evtl. dumme) idee. im moment baue ich jedes mal im workflow ein neues docker-image und lasse die sachen dann in diesem container laufen. jonas hatte schon mal experimentiert, ob man zeit gewinnen würde, wenn man das image in der gh-registry ablegt und im workflow nur zieht - aber das hat nicht wirklich was gebracht (sagte er damals). wenn man die installationsskripte für die debian-pakete, die man beim erstellen des docker-images ausführt, direkt im ubuntu-runner ausführen würde und danach direkt im ubuntu-runner arbeiten würde, müsste das am ende doch schneller sein, oder? man spart sich das ziehen des basis-images und den overhead des dockerstarts für jeden befehl. was denkst du? lohnt es sich, hierfür nochmal ein ticket aufzumachen und da weiter zu experimentieren? oder ist das nur ne spinnerte idee, die am ende nicht viel bringt? oder sollte man eher nochmal der registry-sache nachgehen (eigentlich müsste das doch deutlich schneller sein als das image neu zu erstellen?!).

[GIT] .gitignore und .gitattributes anpassen, .editorconfig überprüfen

  • .gitattributes:
    * text=auto eol=lf
    
    *.cmd text eol=crlf
    *.bat text eol=crlf
    
  • .gitignore: für die im Repo tatsächlich betrachteten Dateien formulieren, nicht allgemein für "alles"
  • .editorconfig: nochmal überprüfen, ob das alles Sinn macht
  • Danach nochmal git add --renormalize . ausführen ...

Bezieht sich auf:

  • Compilerbau/CB-Lecture-Bachelor
  • Compilerbau/AnnotatedSlides
  • Compilerbau/Mini-Python
  • Compilerbau/we-can-virtuowl

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

[ORGA] Builder in neues Repo auslagern

  • Neues public Repo für die Studis anlegen
  • Builder-Unterordner per git subtree --push in das neue Repo pushen
  • Wiki im neuen Repo ergänzen mit aktualisierter und gekürzter Doku
  • Links (Repo, Wiki) in Aufgabenblatt 01 und Orga/FAQ unterbringen (siehe auch #62)

siehe https://github.com/Compiler-CampusMinden/Mini-Python/milestone/1


@CrappyAlgorithm Wie weit ist das Mini-Python-Repo? Kann der Ordner gesplittet werden oder wird es da in den nächsten Tagen noch Änderungen geben?

@CrappyAlgorithm Wie weit ist die Doku, die den Sprachumfang von Mini-Python beschreibt? Kann die schon ins neue Wiki für die Studis?

@CrappyAlgorithm @mpeters4 Wenn ich den git subtree --push mache, dann landet der Inhalt des Builder-Ordners toplevel im neuen Repo. D.h. im Prinzip müsste ich in den Builder-Ordner noch den ganzen Readme/Contrib/License-Kram reintun, damit das "drüben" dann auch sichtbar wird. Andererseits ist das im Mini-Python-Repo dann dupliziert - hier liegt das ja eine Ebene höher nochmal alles rum (und zudem müssten die Links in den Sachen im Builder-Ordner alle auf das Studi-Repo zeigen). Seht ihr hier eine vernünftige Lösung? Wäre das eventuell der Punkt, den Ordner richtig aus dem Mini-Python-Repo zu lösen und nochmal neu als Git-Submodule einzubinden?

[BUG] delete-rem-tags ignores git configuration

Aktuell besteht bei mir das Problem, dass name und email von git im container nicht konfiguriert sind, und sich git daher weigert, die commits zu machen. Die REM-Tags werden allerdings trotzdem gelöscht (wahrscheinlich interessant für dich @liketechnik ). Testweise habe ich im Dockerfile RUN git config --global user.name ... eingefügt, dann funktioniert das Skript. Muss ich da noch irgendwas beachten, damit die Konfiguration in den container übernommen wird?

Originally posted by @malt-r in #16 (comment)

ILIAS 7.x: Pretty URLs won't work in HTML-Learnmodul anymore

Nach dem Upgrade auf ILIAS 7.x werden im HTML-Lernmodul die Landing-Pages nicht mehr gefunden. Statt foo.de/bar/ muss man nun auf foo.de/bar.html zurückfallen ("ugly URLs).

Leider funktioniert damit dann die neue Print-Funktionalität im Hugo-Relearn-Theme nicht mehr.

Ein Issue ist Upstream eröffnet (McShelby/hugo-theme-relearn#322).

Bis dahin ist die Lösung:

  1. Ugly-URLs aktivieren (foo.de/bar/ => foo.de/bar.html)
  2. Kanonische URLs aktivieren (foo.de/bar.html => <baseURL>/foo.de/bar.html)
  3. Relative URLs deaktivieren (kein Rewriting relativer URLs relativ zum aktuellen Content)
  4. Neue Print-Funktionalität wieder entfernen

Diskussion: Bessere Repo-Struktur

Aktuell haben wir je ein:

  • Lecture-Repo mit
    • Orga-Kram (ändert sich jedes Semester)
    • Vorlesungungsinhalten: Skript+Folien (Markdown), Code-Beispiele (Java, ...)
    • Aufgaben fürs Praktikum (Markdown)
  • Vorgabe-Repo mit dem Vorgabe-Code (Java) für die Konzept-Aufgaben
  • Musterlösungs-Repo (intern) mit Aufgabe+Vorgabe+Lösung
  • Desktop-Repo mit Starter-Code für die Dungeon-Aufgaben
  • Musterlösungs-Repo (intern) mit Beispiel-Dungeon
  • Quizzes-Repo (intern)
  • Semester-Repo mit Git-Subtrees für Vorgabe-Repo und Desktop-Repo, plus Diskussionsforum

Die Aufteilung ist "historisch gewachsen", und am Anfang stand die Idee einer in sich geschlossenen Kurs-Webseite.

  • Prüfen, ob die Quizzes ins Lecture-Repo integriert werden könnten und/oder sogar in das Vorlesungsmaterial eingebaut werden können (#332)
  • Prüfen, ob die Vorgaben ins Lecture-Repo integriert werden könnten (Vor-/Nachteile? Strukturen?) oder besser in einem eigenen Repo bleiben (dann Aufgaben plus Vorgaben plus Desktop-Dungeon-Starter)
  • Prüfen, ob eine andere+einfachere Aufteilung sinnvoll ist:
    • Alternative Struktur A:
      1. Lecture-Repo für Vorlesungsinhalte (Markdown, Slides, Skript/Web, Code-Beispiele, Quizzes) und Aufgaben plus Vorgaben (Markdown, Code-Vorgaben, Desktop als Dungeon-Starter)
      2. Musterlösungs-Repo (intern) für Musterlösung (zieht Lecture-Repo als Git-Submodule/Subtree)
      3. Musterlösungs-Repo (intern) mit Beispiel-Dungeon
      4. Semester-Repo mit Orga, zeitlicher Zuordnung Woche/VL/Aufgaben/Abgaben/... und Links in die Webseite/ILIAS, Diskussionsforum
    • Alternative Struktur B:
      1. Lecture-Repo für Vorlesungsinhalte (Markdown, Slides, Skript/Web, Code-Beispiele, Quizzes)
      2. Repo für Aufgaben und Vorgaben (Markdown, Code-Vorgaben, Desktop als Dungeon-Starter)
      3. Musterlösungs-Repo (intern) für Musterlösung (zieht Aufgaben-Repo als Git-Submodule/Subtree)
      4. Musterlösungs-Repo (intern) mit Beispiel-Dungeon
      5. Semester-Repo mit Orga, zeitlicher Zuordnung Woche/VL/Aufgaben/Abgaben/... und Links in die Webseite/ILIAS, Diskussionsforum

Im Lecture-Repo würden dann nur noch echte Inhalte gesammelt, d.h. bei den Übungsblättern nur noch die Aufgaben-Fragmente. Die Inhalte des Lecture-Repo (Slides, Skript, evtl. Aufgaben) würden dabei als PDF und/oder als Webseite gerendert/bereitgestellt.

In einem Semester-Repo würde das dann konkret für das jeweilige Semester zugeordnet. d.h. dort hat man dann einen Table mit Woche, VL-Themen (Link auf die gerenderten Inhalte), Links auf Aufgaben(-fragmente) (Markdown), Abgabedaten, Abgabemodus, ... das ist eigentlich nix, was ins Lecture-Repo gehört (hier sollten nur inhaltliche Dinge rein). Das Semester-Repo (und ggf. das Aufgaben-Repo) werden als reine Markdown-Inhalte mit Preview in der GitHub-Oberfläche bereitgestellt. Das Semester-Repo wird nach jedem Semester archiviert und ggf. als Template für das Folgesemester benutzt (und danach gelöscht).

Fix Bibtex

Bibtex: add langid = {en} or langid = {de} to ensure proper case

[REPO] Repo doch aufteilen in BA und MA?

siehe #128: Das Tooling hat Schwierigkeiten mit lokalen Images.

Repo doch aufteilen in BA und MA?

  • (-) initialer Aufwand
  • (-) einige Inhalte und Abbildungen sind doppelt
  • (+) die Vorlesungen werden aber ohnehin stärker auseinander driften - eigene Strukturen erscheinen lohnenswert
  • (+) Lesbarkeit erhöht sich (kein Anhängsel mehr)
  • (+) Issue-Tracker ist Zielgruppen-spezifisch

[VL] We CAN VirtuOWL/Alberta verlinken

[ORGA] Aufgabenblätter finalisieren

  • Siehe <!-- TODO --> in den Aufgabenblättern
  • Projektideen BA:
    • OOP-Erweiterungen: Polymorphie (Überschreiben, Überladen, Klassen/Methoden) => zum großen Teil aber schon in der VL ...
    • REPL
    • Syntaxhighlighting, Editor (mit austauschbarer Grammatik)
  • Projektideen MA:
    • Interpreter mit JIT und/oder REPL
    • VM und Bytecode
    • Garbage Collection
    • Syntaxhighlighting, Editor (mit austauschbarer Grammatik) => LSP

[BUILD] Build-Geschwindigkeit erhöhen - generierte Abbildungen mit einchecken?

In CB haben wir viele Abbildungen, die aus LaTeX- oder DOT generiert werden. Das übliche Vorgehen ist, generierte Artefakte nicht einzuchecken und bei Bedarf einfach neu zu bauen.

Das führt in CB zu relativ langen Buildzeiten, sowohl lokal als auch remote (Github-Workflow).

Ideen zur Abhilfe:

  • Ignorieren
  • Generierte Abbildungen mit ins Repo einchecken
  • Lokaler Build: nur make clean benutzen - generierte Abbildungen werden wiederverwendet
  • Remote Build: GH-Cache nutzen?

Open ILIAS Course

  • URL vom offenen ILIAS-Kurs hier im Repo als Start-URL eintragen
  • URL vom neuen HTML-Lernmodul als Base-URL in config.yaml eintragen

[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:

[TOOLING] Update Hugo-Relearn-Theme

  • Update Submodule Pandoc-Lecture
  • Update Submodule Hugo-Lecture
  • Update Submodule Hugo Re-Learn-Theme auf 5.2.1
  • Passe YAML an: markdown/**/*.md:
    • type: => archetype: (für alle .md außer den Index-Markdowns)
    • chapter: true => archetype: "home" im obersten _index.md
    • chapter: true => archetype: "chapter" für alle tieferen `_index.md
  • config.yaml:
    • Section outputs hinzufügen
    • Zeile disableMathJax: false oberhalb von disableMermaid hinzufügen

siehe auch Programmiermethoden-CampusMinden/Prog2-Lecture#578

[GITHUB] Readme, Credits, Contributing und .github/ anpassen

  • README.md:
    • Verweis auf Contributing
    • Verweis auf Credits
    • Lizenzhinweis: Bild, "this work", Authors, Contributers und License (Links)
  • CREDITS.md:
    • Inhalte überprüfen/aktualisieren
    • Hinweis auf Authoren, Contributers und Lizenz
  • CONTRIBUTING.md: Inhalte überprüfen/aktualisieren
  • LICENSE.md: Inhalte überprüfen
  • .github/:
    • Keine Vorlagen für Issues
    • Keine Vorlagen für PRs
    • Workflows überprüfen/aktualisieren
  • #52

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

[TOOLING] Theme hat Schwierigkeiten mit lokalen Abbildungen

Das aktuelle Tooling (vgl. cagix/pandoc-lecture#28) kennt "Images" (leerer Titel) und "Figures" (nicht-leerer Titel).

Images werden über das Relearn Theme als Abbildung mit Lightbox gerendert, dazu konvertiert ein Lua-Filter die Skalierung von Pandoc-Markdown in das Format vom Relearn Theme. Das funktioniert sowohl mit lokalen Abbildungen als auch URLs.

Figures werden vom Lua-Filter in einen customized img-Shortcode übersetzt, der etwas Pfadmagie betreibt und dann eine HTML-figure-Umgebung erzeugt.

Bei unserer Konfiguration (Multi-Lang, Ugly URL, Singe-File-Pages) klappt das mit lokalen Images nicht so richtig: Die Bilder werden von Hugo nur im Ordner der Defaultsprache abgelegt, d.h. die Referenzen in den anderen Sprachen müssen entsprechend dorthin umgebogen werden. Bei Web-Images (mit URL) ist das kein Problem, bei Figures rechnet unser img-Shortcode den Pfad um. Nur bei "normalen" Images klappt die Auflösung nicht (die müsste durch das Hugo Relearn Theme erledigt werden) - und die Nicht-Defaultsprache ist dann quasi kaputt.

Ideen zur Lösung:

  • Images immer als Web-Images einbinden - URL in unserer Repo
    • sehr umständlich und schlecht zu lesen
    • klappt das mit LaTeX?
  • Images auch als img-Shortcode ausgeben
    • das macht die Image-Links für "normale" (einfachsprachige) Vorlesungen kaputt
  • Repo doch aufteilen in BA und MA
    • initialer Aufwand
    • einige Inhalte und Abbildungen sind doppelt
    • die Vorlesungen werden aber ohnehin stärker auseinander driften - eigene Strukturen erscheinen lohnenswert
    • Lesbarkeit erhöht sich (kein Anhängsel mehr)
    • Issue-Tracker ist Zielgruppen-spezifisch

[BUG] make delete-rem-tags: git-error: "fatal: unsafe repository ('/data' is owned by someone else)"

Describe the bug
The delete-rem-tags script cannot be executed.

To Reproduce
Steps to reproduce the behavior:

  1. Add a <!-- REM --> pair to one of the markdown files (e. g. https://github.com/Compilerbau/CB-Lecture-Bachelor/pull/11/files)
  2. Build the docker image in .github/actions/alpine-pandoc-hugo/: cd .github/actions/alpine-pandoc-hugo/ && make
  3. Execute make delete-rem-tags
  4. Observe the following output message (abbreviated): git-error: "fatal: unsafe repository ('/data' is owned by someone else)"

Expected behavior

The script runs and adds the commits according to the rem tags.

Desktop (please complete the following information):

  • OS: Linux
  • Browser not relevant
  • Version not relevant

Additional context

  • You may need to rebuild the docker image from scratch in order to get the latest git version inside the image.

  • Does not occur when executing the docker image as non-root user with podman

  • Originally reported by @malt-r (I hope you are able to edit this issue's description, feel free to change anything I misreported here).

[VL-MA] frontend/parsing/lr-parser" # Splitten: Teil 1 (Intro) und Teil 2 (Rest)

Dazu muss die Datei markdown/frontend/parsing/lr-parser.ma.md kopiert und passend umbenannt werden. Beide Dateien müssen dann unter data/ma/schedule.yaml eingetragen/verlinkt werden.

Danach können die Inhalte auseinander gezogen werden, so dass es für eine Intro-Vorlesung und einen fortgeschritteneren Teil reicht.

Warnung für Bild in Intermediate/Intro: Labels zu klein (Font)

Toolchain vereinfachen: Templates mit Pandoc nachbauen

Die Erkennung von Mathe ist furchtbar in Hugo ... Außerdem zieht Hugo und/oder das verwendete Template diverse Bibliotheken (Problem wg. der Datenschutzerklärung). Zusätzlich braucht die Kombination von Pandoc und Hugo zu lange zum Übersetzen der Seiten.

Kann man die Webseite in pure-Pandoc nachbauen?

  • Pages mit eigenem Template
  • Navigation in Page mit TOC
  • Navigation über alle Pages mit Menü
  • Konfigurierbarer Schedule

siehe auch cagix/pandoc-lecture#10

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.