102 lines
3.6 KiB
TeX
102 lines
3.6 KiB
TeX
% 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}
|