Especificación Lenguaje FKIL

Esta entrada forma parte de una serie de artículos dedicados al proyecto FKScript, construcción de un compilador y una máquina virtual para un lenguaje de script con C# y ANTLR, entre los cuales podrás encontrar una descripción detallada de cada módulo, documentación técnica, ejemplos y tutoriales de uso que pueden ser de tu interés. No olvides consultar la página principal de FKScript para más información.

Indice

  1. Programa FKIL.
  2. Comentarios.
  3. Directivas.
  4. Juego de instrucciones.
  5. Etiquetas.
  6. Ejemplo de programa FKIL.

1. Programa FKIL

Un programa en FKIL estará compuesto por un unico módulo con la siguiente estructura:

directiva_1
directiva_2

instrucción_1
instrucción_2

Nota: Todas las directivas incluidas en el programa deberán aparecer antes de cualquier instrucción.

2. Comentarios

Se podrán incluir comentarios en el código precediendo la una linea con el caracter ‘#’.

3. Directivas

Las directivas permitidas en FKIL son las siguientes:

Directiva Descripción Valor por defecto
.program Indica el nombre del programa.
.stack Indica el tamaño máximo de la pila. 1024
.heap Indica el tamaño máximo de la memoria dinámica. 1024
.locals Indica el número de variables locales utilizadas. 0

Ejemplos:

.program Prueba
.stack 1500
.heap 1000
.locals 4

4. Juego de instrucciones

Las instrucciones permitidas en FKIL son las siguientes:

Instrucción Descripción Nº Par. Parámetro
ipush Coloca una constante entera en la pila 1 Constante
fpush Coloca una constante real en la pila 1 Constante
spush Coloca una constante cadena en la pila 1 Constante
bpush Coloca una constante booleana en la pila 1 Constante
iload Carga el valor de una variable entera en la pila 1 Nº de variable
fload Carga el valor de una variable real en la pila 1 Nº de variable
sload Carga el valor de una variable cadena en la pila 1 Nº de variable
bload Carga el valor de una variable booleana en la pila 1 Nº de variable
istore Almacena en una variable entera el primer elemento de la pila 1 Nº de variable
fstore Almacena en una variable real el primer elemento de la pila 1 Nº de variable
sstore Almacena en una variable cadena el primer elemento de la pila 1 Nº de variable
bstore Almacena en una variable booleana el primer elemento de la pila 1 Nº de variable
pop Elimina el primer elemento de la pila 0
iadd Suma de enteros 0
fadd Suma de reales 0
isub Resta de enteros 0
fsub Resta de reales 0
imul Producto de enteros 0
fmul Producto de reales 0
idiv División de enteros 0
fdiv División de reales 0
nneg Negación numérica 0
bneg NO lógico 0
ncmp Comparación numérica 0
bcmp Comparación booleana 0
goto Salto incondicional 1 Etiqueta
ifeq Salto si igual a 0 1 Etiqueta
ifne Salto si distinto de 0 1 Etiqueta
iflt Salto si menor que 0 1 Etiqueta
ifgt Salto si mayor que 0 1 Etiqueta
ifge Salto si mayor o igual que 0 1 Etiqueta
ifle Salto si menor o igual que 0 1 Etiqueta
scmp Comparación de cadenas 1 Etiqueta
sadd Concatenación de cadenas 1 Etiqueta
iret Retorno de entero 0
fret Retorno de real 0
sret Retorno de cadena 0
bret Retorno de booleano 0
callapi Llamada a función de la API externa 1 Nombre Función

La máquina virtual se basará únicamente en la pila, por lo que los parámetros de la mayoría de las instrucciones deberán apilarse antes de ejecutar la instrucción.

5. Etiquetas

Las etiquetas incluidas en el código, a las cuales podrán hacer referencia todas las instrucciones condicionales se indicarán con un identificadro seguido del caracter ‘:’

Ejemplo:

ifeq etiqueta1
ipsuh 1

etiqueta1:
ipush 2

6. Ejemplo programa FKScript

A continuación se muestra un programa simple escrito en lenguaje FKScript:

#Programa de prueba

.program Prueba
.locals 1

ipush 5
istore 0
ipush 1
fload 0
ipush 2
ncmp
ifgt etiq1
pop
ipush 0
etiq1:
ifeq
etiq2
ipush 1
istore 0
goto etiq3
etiq3:
fload 0
ipush 3
fdiv
fret

Powered by WordPress. Designed by Woo Themes