STxT: Semantic TexT
Un Lenguaje, Infinitas Posibilidades

Parseo de STxT

Proceso genérico

Parseo por líneas

El proceso de parseo puede hacerse línea a línea, por lo que podemos decir que de forma general tenemos:

mientras no fin de fichero
	leer linea
	procesar linea
fin mientras

Durante el proceso es adecuado tener un listado de los últimos nodos que hemos ido encontrando según el nivel, ya que de esto depende el procesado correcto.

Procesado de línea

El primer paso en el procesado de la línea es la normalización de la línea. Una línea está normalizada cuando está en forma compacta (o semicompacta), por lo que hay que comprobar si lo está, y si no lo está, transformarla. En la normalización también se eliminan las líneas de comentarios.

Hay que tener en cuenta en la normalización que si el nodo anterior era de multitexto, al superar cierto nivel será parte de ese mismo nodo. Es decir, será texto a continuación. También será parte de él si no llega al nivel pero la línea está completamente en blanco, en cuyo caso se traducirá por texto con un salto de línea.

Una vez hemos compactada la línea, el procesado sigue independientemente, y ya sólo falta obtener el nivel de la nueva línea y distinguir entre unos pocos casos:

En cada uno de los casos se trata de actualizar el estado de nuestras variables, y proseguir con el proceso.

Nota: Lo más importante aquí es ver que es un proceso que se puede hacer línea a línea, y las decisiones a tomar son relativamente sencillas. Esto nos permite tener un parser muy eficiente, que a su vez puede actuar de validador de la gramática y los nodos.

Validaciones nodos con namespace

Las validaciones se hacen en varios puntos del parseo:

¿Cuándo damos por finalizado un nodo? Hay dos circunstancias que hacen que un nodo se de por finalizado. Una de ellas es cuando aparece otro nodo con un nivel igual o inferior a este nodo. La otra es cuando se ha procesado todo el fichero y ya no quedan nodos a validar. En estos puntos el nodo se da por finalizado y pueden empezar las validaciones.

Los nodos del lenguaje

En la descripción del lenguaje habíamos dicho que los tipos de datos no tienen limitación ni están ligados a un lenguaje, por lo que las validaciones sólo deberían ser comprobadas mediante expresiones regulares o métodos que aseguren este hecho.

Tenemos los siguientes tipos de nodos:

Las expresiones regulares que podríamos usar para validar nodos son:

BINARY       = ^(0|1|\s)+$
BOOLEAN      = ^0|1$
HEXADECIMAL  = ^([a-f0-9]|\s)+$
INTEGER      = ^(\-|\+)?\d+$
NATURAL      = ^\d+$
NUMBER       = ^(\-|\+)?\d+\.\d+(e(\-|\+)?\d+)?$
RATIONAL     = ^(\-|\+)?\d+\/\d+$

Namespaces

Almacenaje

Los namespaces se deben obtener de forma independiente. Una estrategia es tener un repositorio de namespaces en disco, e ir a buscarlos siempre allí.

Detalles a tener en cuenta

Hay algunos detalles que hay que tener en cuenta en el parseo: