add doc
This commit is contained in:
68
doc.org
Normal file
68
doc.org
Normal file
@ -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.
|
101
doc.tex
Normal file
101
doc.tex
Normal file
@ -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}
|
Reference in New Issue
Block a user