Especificación Lenguaje FKScript

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 FKScript
  2. Tipos de datos
  3. Declaración de variables
  4. Instrucciones
    1. Asignaciones
    2. Intrucción IF
    3. Instrucción WHILE
    4. Instrucción RETURN
  5. Expresiones
    1. Expresiones aritméticas
    2. Expresiones lógicas
    3. Expresiones de cadena
  6. Ejemplo programa FKScript

1. Programa FKScript

Un programa en FKScript estará compuesto por una serie de declaraciones de funciones API y una única función expresada mediante la sintaxis siguiente:

declaraciones-api

program tipo nombrePrograma
{
    ...CódigoPrograma...
}

El tipo podrá ser cualquiera de los indicados en el apartado siguiente e indica el tipo de dato del valor devuelto por el programa.

Por su parte, las declaraciones de la API seguirán la notación siguiente:

api tipo nombreFuncion ( lista_parámetros );

La lita de parámetros estará formada por una serie de declaraciones de variable separadas por comas. Un ejemplo de delaración de función sería el siguiente:

api int sumaEnteros ( int entero1, int entero2 );

2. Tipos de datos

Los tipos de datos permitidos serán:

int Valor numérico entero
float Valor numérico real
bool Valor lógico
string Cadena de caracteres

3. Declaración de variables

La declaración de variables en FKScript se realizará de la misma forma que en los lenguajes C# o Java, con la diferencia de no poder inicializarse dicha variable en la propia declaración. La sintaxis será la siguiente:

Tipo NombreVariable;

El tipo de dato debe ser uno de los indicados en el apartado anterior y el nombre de la variable debe cumplir las siguientes reglas:

  1. Comenzar por una letra o por el caracter de subrayado ‘_’.
  2. El resto de caracteres deben ser dígitos, letras o caracteres de subrayado ‘_’.

El lenguaje será sensible a mayúsculas y minúsculas, por lo que identificadores como por ejemplo NumLinea y numlinea se considerarán distintos.

Como ejemplo, para declarar una variable de tipo entero llamada numeroFila utilizaremos la siguiente sentencia:

int numeroFila;

4. Instrucciones

4.1. Asignaciones

Las instrucciones de asignación serán idénticas a las de C# o Java, siguiéndose la siguiente sintaxis:

NombreVariable = expresión;

La expresión asignada podrá ser un literal, un identificador o cualquier operación entre ellos. Así por ejemplo, serán asignaciones válidas:

miVariable = 3;
miOtraVariable = miVariable;
otraVariableMas = 3 + (miVariable * 5);

4.2. Instrucción condicional if

La instrucción if seguirá la siguiente sintaxis:

if ( expresionLogica )
{
    Código ejecutado cuando 'expresionLogica' es cierta
}
else
{
    Código ejecutado cuando 'expresionLogica' es falsa
}

El bloque else será opcional en esta instrucción.

4.3. Instrucción iterativa while

La instrucción while seguirá la siguiente sintaxis:

while ( expresionLogica )
{
    Código ejecutado mientras 'expresionLogica' es cierta
}

4.4. Instrucción return

La instrucción return se utilizará para indicar la expresión devuelta por el programa y seguirá la siguiente sintaxis:

return expresion

5. Expresiones

5.1. Expresiones Aritméticas

Las expresiones aritméticas permitidas para los tipos int y float serán las siguientes:

+ Suma
– Resta / Menos unario
* Producto
/ División

5.2. Expresiones Lógicas

Las expresiones lógicas permitidas serán las siguientes:

== Igual
!= Distinto
> Mayor
>= Mayor o igual
< Menor
<= Menor o igual
! Negación lógica

5.3. Expresiones de cadenas

Las expresiones entre cadenas permitidas serán las siguientes:

+ Concatenación de cadenas

6. Ejemplo programa FKScript

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

api int sumaEnteros(int e1, int e2);

program Prueba
{
    int c;

    c = sumaEnteros(5,2);

    if(c &amp;amp;gt; 2)
    {
        c = 1;
    }

    return c;
}