45 lines
2.7 KiB
TeX
45 lines
2.7 KiB
TeX
\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.
|