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