diff --git a/doc.org b/doc.org new file mode 100644 index 0000000..fc6f8e8 --- /dev/null +++ b/doc.org @@ -0,0 +1,68 @@ +#+TITLE: DynLang Projekt Dokumentation +#+OPTIONS: toc:nil + +* Sytaktischer Zucker +Es waren keine Anpassungen des Interpreters notwendig, nur eine Erweiterung des Lexings/Parsings. + +** Lexing +Es wurden neue Token definiert für + +- Arithmetische Operatoren (+, -, *, /, %, ...) +- Arithmetische Operatoren mit Assignment (+=, -=, ...) +- Vergleiche (<, <=, ==, ...) +- Logische Operatoren (&&, ||, !) + +** Parsing +Arithmetische, Vergleichs- und Logische Operatoren werden im Parser zu Methodenaufrufen der Builtin-Methoden übersetzt. +Das Programm ist lauffähig, falls die Traits der entsprechenden Typen diese Methoden Implementieren. + +Für Inplace-Operationen wird zusätzlich zum Builtin-Aufruf ein Assignment-Knoten im AST erzeugt. + +Klammern von Ausdrücken ist ebenfalls möglich, dafür wird beim Parsing der geklammerte Ausdruck eine Ebene tiefer in den AST eingefügt. + +Die Grammatik ist mehrdeutig, Präzedenz wird durch den Parsergenerator behandelt. + +* Primitive Datentypen +Es wurden die Typen Double, String und Boolean hinzugefügt. + +** Lexing +Es wurden neue Token definiert für + +- String Literale ("Hallo") +- Boolean Literale ("true", "false") +- Double Literale (1.2, 1., .1, -.1, ...) + +** Parsing +Der AST wurde um Expression-Knoten für Double-, String- und Boolean-Literale erweitert (analog zum IntLiteral-Knoten). +In der Grammatik können Double/String/Boolean Nichtterminale bei einer basicexpression auftreten. + +** Objectmodel +Die Boolean/String/Double/Int Objekte erben vom neuen PrimitiveObject, welches den zugehörigen Trait, die Parents, die Slots und den Wahrheitsgehalt bestimmt. + +Der Objectspace bekommt Methoden zum Erzeugen eines neuen Boolean/String/Double. + +Für jeden Datentyp wurde ein neuer Builtin-Trait hinzugefügt mit Methoden zum Vergleich/zur Conversion etc (mit den entprechenden Primitives). + +** Compiler/Interpreter +Es wurden neue Bytecodes für Literale hinzugefügt. +Diese sind größtenteils identisch zum IntLiteral-Bytecode, nur der StringLiteral- und DoubleLiteral-Bytecode speichert den Inhalt in der Symboltabelle. + +Die Bytecodes werden analog zu IntLiteral interpretiert, nur bei StringLiteral und DoubleLiteral wird aus der Symboltabelle geladen. + +* Garbage Collection +Es wurde Mark & Sweep verwendet. + +** Implementierung +Im Objectmodel wurde der AbstractObject Klasse ein GC-Flag "mark" gegeben. + +Im Objectspace werden alle existierenden Objekte in einer Liste gehalten. + +Ablauf: +- Alle Markierungen entfernen +- Markieren (rekursiv ausgehend von der Lobby, diese wird also immer markiert) +- Entfernen (aus der Liste im Objectspace) + +** Aufruf aus Simple +Es wurde die "gc" Anweisung hinzugefügt: AST-Knoten (GCStatement) und Bytecode (GC) + +Der Interpreter ruft im Objectspace die "gc()" auf und legt "true" auf den Stack, da ein Rückgabewert nötig ist. diff --git a/doc.pdf b/doc.pdf new file mode 100644 index 0000000..0c2d028 Binary files /dev/null and b/doc.pdf differ diff --git a/doc.tex b/doc.tex new file mode 100644 index 0000000..08eae74 --- /dev/null +++ b/doc.tex @@ -0,0 +1,101 @@ +% Created 2021-09-02 Thu 18:45 +% Intended LaTeX compiler: pdflatex +\documentclass[12pt,a4paper,ngerman,parskip=full]{scrartcl} +\usepackage{christex} +\author{Christoph Urlacher} +\date{\today} +\title{DynLang Projekt Dokumentation} +\hypersetup{ + pdfauthor={Christoph Urlacher}, + pdftitle={DynLang Projekt Dokumentation}, + pdfkeywords={}, + pdfsubject={}, + pdfcreator={Emacs 28.0.50 (Org mode 9.5)}, + pdflang={English}} +\begin{document} + +\maketitle + +\section{Sytaktischer Zucker} +\label{sec:org90f987c} +Es waren keine Anpassungen des Interpreters notwendig, nur eine Erweiterung des Lexings/Parsings. + +\subsection{Lexing} +\label{sec:org8349833} +Es wurden neue Token definiert für + +\begin{itemize} +\item Arithmetische Operatoren (+, -, *, /, \%, \ldots{}) +\item Arithmetische Operatoren mit Assignment (+=, -=, \ldots{}) +\item Vergleiche (<, <=, ==, \ldots{}) +\item Logische Operatoren (\&\&, ||, !) +\end{itemize} + +\subsection{Parsing} +\label{sec:orga2826bd} +Arithmetische, Vergleichs- und Logische Operatoren werden im Parser zu Methodenaufrufen der Builtin-Methoden übersetzt. +Das Programm ist lauffähig, falls die Traits der entsprechenden Typen diese Methoden Implementieren. + +Für Inplace-Operationen wird zusätzlich zum Builtin-Aufruf ein Assignment-Knoten im AST erzeugt. + +Klammern von Ausdrücken ist ebenfalls möglich, dafür wird beim Parsing der geklammerte Ausdruck eine Ebene tiefer in den AST eingefügt. + +Die Grammatik ist mehrdeutig, Präzedenz wird durch den Parsergenerator behandelt. + +\section{Primitive Datentypen} +\label{sec:org550fd12} +Es wurden die Typen Double, String und Boolean hinzugefügt. + +\subsection{Lexing} +\label{sec:org1181424} +Es wurden neue Token definiert für + +\begin{itemize} +\item String Literale (``Hallo'') +\item Boolean Literale (``true'', ``false'') +\item Double Literale (1.2, 1., .1, -.1, \ldots{}) +\end{itemize} + +\subsection{Parsing} +\label{sec:org9a5fe03} +Der AST wurde um Expression-Knoten für Double-, String- und Boolean-Literale erweitert (analog zum IntLiteral-Knoten). +In der Grammatik können Double/String/Boolean Nichtterminale bei einer basicexpression auftreten. + +\subsection{Objectmodel} +\label{sec:org00b3848} +Die Boolean/String/Double/Int Objekte erben vom neuen PrimitiveObject, welches den zugehörigen Trait, die Parents, die Slots und den Wahrheitsgehalt bestimmt. + +Der Objectspace bekommt Methoden zum Erzeugen eines neuen Boolean/String/Double. + +Für jeden Datentyp wurde ein neuer Builtin-Trait hinzugefügt mit Methoden zum Vergleich/zur Conversion etc (mit den entprechenden Primitives). + +\subsection{Compiler/Interpreter} +\label{sec:orgff4dad7} +Es wurden neue Bytecodes für Literale hinzugefügt. +Diese sind größtenteils identisch zum IntLiteral-Bytecode, nur der StringLiteral- und DoubleLiteral-Bytecode speichert den Inhalt in der Symboltabelle. + +Die Bytecodes werden analog zu IntLiteral interpretiert, nur bei StringLiteral und DoubleLiteral wird aus der Symboltabelle geladen. + +\section{Garbage Collection} +\label{sec:org52b32d1} +Es wurde Mark \& Sweep verwendet. + +\subsection{Implementierung} +\label{sec:orgf803db4} +Im Objectmodel wurde der AbstractObject Klasse ein GC-Flag ``mark'' gegeben. + +Im Objectspace werden alle existierenden Objekte in einer Liste gehalten. + +Ablauf: +\begin{itemize} +\item Alle Markierungen entfernen +\item Markieren (rekursiv ausgehend von der Lobby, diese wird also immer markiert) +\item Entfernen (aus der Liste im Objectspace) +\end{itemize} + +\subsection{Aufruf aus Simple} +\label{sec:org9a2afd8} +Es wurde die ``gc'' Anweisung hinzugefügt: AST-Knoten (GCStatement) und Bytecode (GC) + +Der Interpreter ruft im Objectspace die ``gc()'' auf und legt ``true'' auf den Stack, da ein Rückgabewert nötig ist. +\end{document}