\section{Implementación del Lenguaje}
\subsection{Arquitectura}

\subsubsection{Compilador}
El compilador de Obelisk tiene como propósito leer el código fuente usando un \textit{Lexer}. Luego se utiliza el \textit{Parser} para analizar y aplicar operaciones en base a los tokens que encontró el \textit{Lexer}.
Tras esto, se crea una Base de Conocimiento, el cual posee la característica de poder consultar su información utilizando un software externo. Finalmente, el código relevante se transforma en código intermedio(IR) que luego será transformado en binario.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth, height=0.6\textheight, keepaspectratio]{figures/diagramacompi.png}
    \caption{Diagrama Estructural del Compilador}
    \label{fig:diagramacompi}
\end{figure}

\subsubsection{Base de Conocimiento}
La Base de Conocimiento es donde se almacena toda la lógica proveniente de los hechos, reglas y acciones. Su implementación fue hecha utilizando SQLite, el cual permite hacer consultas a la base de conocimiento utilizando el lenguaje SQL.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.6\textwidth, height=0.6\textheight, keepaspectratio]{figures/kb_diagram.png}
    \caption{Estructura del Base de Conocimiento}
    \label{fig:kbstructure}
\end{figure}

La estructura de la base de conocimientos consiste en seis tablas principales las cuales se describen en el siguiente cuadro:

\begin{table}[H]
\centering
\begin{tabular}{|l|p{0.66\linewidth}|}
\hline
\multicolumn{1}{|c|}{\textbf{Nombre de Tabla}} & \multicolumn{1}{c|}{\textbf{Propósito}} \\ \hline
entity & La tabla entity es usada para almacenar los nombres de las entidades presentes en los hechos, reglas y acciones. \\ \hline
verb & Se utiliza la tabla verb para almacenar los nombres de los verbos usados en los hechos y reglas. \\ \hline
action & La tabla action almacena los nombres de las posibles acciones que se pueden tomar. \\ \hline
fact & La tabla fact tiene los hechos verdaderos. Si existe una fila en esta tabla, la relación entre las dos entidades es verdadera. \\ \hline
rule & La tabla rule contiene reglas. Si una regla resulta ser verdad, se inserta el hecho en la tabla fact. \\ \hline
suggest\_action & La tabla suggest\_action contiene las dos posibles acciones que se pueden tomar dependiendo si el hecho es verdadero o falso. \\ \hline
\end{tabular}
\caption{Estructura del Base de Conocimiento}
\label{tab:kb-structure}
\end{table}

\subsubsection{Librería}
La librería de Obelisk permite interactuar y consultar a la Base de Conocimiento de Obelisk, con el uso de un software externo. Hay dos tipos de datos que puede devolver la consulta. Un string que representa la acción a tomar o un numero entre 0 y 1 que representa su valor de verdad.
