Anexo II – Especificación del Lenguaje AnSISOP
AnSISOP es un lenguaje de programación interpretado de propósito general y bastante bajo nivel. Su sintaxis es simple y, en general, no es muy recomendable para utilizar en tareas productivas. En cambio, su objetivo es principalmente académico: ayudar a entender los conceptos y mecanismos que un sistema operativo debe tener en cuenta para manejar la ejecución de los programas.
El lenguaje se divide en dos capas: la sintaxis de alto nivel, utilizada para escribir los scripts, y las operaciones Primitivas que la CPU deberá ejecutar para llevar a cabo las instrucciones de los primeros. El alumno deberá desarrollar el intérprete del programa y las diversas primitivas que serán invocadas.
Para la evaluación del trabajo práctico no se proveerán programas con errores de sintaxis ni de semántica.
Sintaxis
El lenguaje AnSISOP es case-sensitive; es decir,
hola
yHola
son diferentesEl código principal del programa estará comprendido entre las palabras reservadas
begin
yend
.begin
solo indica por donde comenzará a ejecutar el programa.Las sentencias finalizan con un salto de línea. Los saltos adicionales son ignorados.
Toda línea comenzada por un caracter numeral (
#
) es un comentario y debe ser ignorado.Todo programa deberá terminar con una línea en blanco.
Un
:
seguido de una palabra es una etiqueta que será utilizada para permitir saltos dentro del código conjump
,jz
yjnz
, explicados más adelante.Todas las variables dentro de una función son locales.
Una función puede llamar a otra función.
Variables
Las variables locales se declaran luego de la sentencia variables
. Son solamente de tipo entero con signo y su identificador es un caracter alfabético [a-zA-Z]. Su valor no debe ser inicializado. Se las indica en el código solo con su nombre.
Las variables dadas como parámetros de funciones se nombran con un único dígito [0-9] y se accederá a ellas en el código anteponiendo el signo $
($0
refiere al primer parámetro, y así).
Las variables compartidas se declaran e inicializan en la configuración del Núcleo, se nombran como cadenas sin restricción de nombre, y se las indica en el código como !identificador
.
Asignación
Con el nombre de la variable a la izquierda de un signo igual, se le podrá asignar a una variable como valor:
Un número entero u otra variable (local, parámetro o compartida; no semaforos)
El resultado de una operación aritmética la cual podrá ser suma o resta
Salto condicional
Las instrucciones de salto condicional saltar-si-no-es-cero (jnz
- jump on not-zero) y saltar-si-es-cero (jz
- jump on zero) recibirán como parámetro una variable que evaluarán y una etiqueta a la que deberán saltar en caso de que se cumpla la condición.
Estas instrucciones, por definición del enunciado, tendrán como origen y destino el procedimiento actual. En otras palabras, el código de una función o procedimiento no podrá saltar dentro del código de otro.
Este código de ejemplo incrementa la variable
i
de uno a diez e imprime dichos valores en pantallaObserve que si la variable
i
no es igual a 10 entoncesb = i - 10
no es cero, entonces la instrucción de salto condicional iría a la etiquetainicio_for
hasta llegar a la 10ma iteración, donde no saltará más.
Entrada/Salida: io
io
La llamada al sistema io
recibirá dos parámetros. 1. Una cadena como identificador del sistema del dispositivo de entrada/salida 1. La cantidad de operaciones de entrada/salida que se realizarán en éste dispositivo
Impresión en pantalla
Existen dos formas de impresión. textPrint
seguido de una cadena imprimirá la cadena tal cual aparece en el código fuente. La palabra reservada print
será utilizada para mostrar el valor de la variable que reciba como parámetro.
La información deberá ser mostrada en la terminal del programa y registrada en el log del sistema.
Ejemplo:
Resultado:
Funciones
La definición de las funciones estará dada por la palabra reservada function
seguida del nombre de la misma. Todas las funciones retornan un valor y no existe en el lenguaje el concepto de procedimiento.
Código de ejemplo
Este código de ejemplo imprime variables.
Lo que se ve por pantalla sería (Nótese la localidad/scope de las variables):
Llamamos "variables compartidas" a aquellas manejadas por el Núcleo, de las que todos los CPUs tiene acceso. No son "variables globales" ya que "global" refiere al scope/contexto de cada programa. No existen en AnSISOP las variables globales.
Last updated