jueves, 9 de agosto de 2018

Compiladores - Ejercicio 3


Ampliar el intérprete desarrollado en el ejercicio 2, de tal manera que ejecute también las siguientes sentencias:

Funciones
Esta sentencia tiene el comportamiento habitual de las funciones de los lenguajes de programación populares, manejan su propio ámbito y su sintaxis es la siguiente:

Function <tipo> <identificador> (<lista de parámetros>)
{
     <lista de sentencias>
}
    
Los posibles tipos para funciones son:
  • Number, String, Boolean: Tipos aceptados para funciones que retornan valor.
  • Void: Tipo utilizado para definir funciones que no retornan valor.

La lista de parámetros puede contener cero o más definiciones de parámetro separados por coma:

<tipo> <identificador>, <tipo> <identificador> ..., <tipo> <identificador>

Los tipos aceptados en una definición de parámetro son: Number, String, Boolean

Llamadas a funciones
Esta sentencia tiene el comportamiento habitual de las llamadas a funciones de los lenguajes de programación populares.
La sintaxis para las funciones void es la siguiente:

<identificador> (<lista de parámetros>);

Las funciones que retornan valor pueden llamarse como si se tratara de una expresión cualquiera que genera un valor al evaluarse, por ejemplo puede llamarse como parte de una operación aritmética o como parte de una concatenación, etc.

<identificador> (<lista de parámetros>)

Return
Esta sentencia tiene el comportamiento habitual de la sentencia Return de los lenguajes de programación populares y su sintaxis es la siguiente:

Return <expresión>;
Return; --Para el caso de las funciones Void
    
Break
Esta sentencia tiene el comportamiento habitual de la sentencia Break de los lenguajes de programación populares y su sintaxis es la siguiente:

Break;

Esta sentencia tiene como principal función terminar bucles y con él se puede terminar cualquier bucle del lenguaje: While, DoWhile, For.

Arreglos
Estas estructuras tienen el comportamiento habitual de los arreglos de los lenguajes de programación populares, sus índices comienzan en cero y pueden ser arreglos de una o más dimensiones.

La sintaxis para su declaración es la siguiente:

Declare <tipo> <identificador> [<expresión>][<expresión>]...[<expresión>];

La sintaxis para su acceso es:

<identificador> [<expresión>][<expresión>]...[<expresión>]

La sintaxis para asignar valores a un arreglo es:

<identificador> [<expresión>][<expresión>]...[<expresión>]=<expresión>;

Otras consideraciones
  • En el nivel más alto del archivo solamente se va a tener un conjunto de funciones y variables declaradas (variables globales).
  • Una función solo puede ser definida en el nivel más alto, es decir, una función no puede definirse dentro de otra función.
  • Los ciclos y el resto de las sentencias solo pueden estar declaradas dentro de una función, la única sentencia admitida fuera de una función es la declaración de variables (variables globales).
  • Deberá existir una función Main de tipo void, que será la primera en ejecutarse de todo el archivo.
  • Puede haber cero o muchas variables globales definidas.
  • No es posible definir funciones de tipo arreglo, dentro de las funciones podrá hacerse uso irrestricto de arreglos, y fuera de las funciones podrán declarase arreglos, pero no se podrá definir una función que devuelva un arreglo, las funciones solo podrán retornar alguno de los tres tipos básicos existentes.
Referencias recomendadas: