miércoles, 18 de agosto de 2010

 METALENGUAJE 
BNF
________

La notación BNF se usa para describir sintácticamente lenguajes de programación.

La definición formal de un LP se conoce como gramática.

Una gramática se compone de un conjunto de reglas que definen palabras y unidades sintácticas.

Una gramatica formal es una que usa una notación definida (o metalenguaje) de manera escrita).

Cuando se considera una estructura de una oración en Español, se le describe por lo general como una secuencia de categorías:

sujeto | verbo | predicado

Podemos decir que una oración puede ser declarativa o interrogativa, esto se denota:

< oración > ::= < declarativa > | < interrogativa >

____________________


donde "::=" significa "se define cómo" y "|" significa "o" ; comparándolo con el lenguaje usado en las gramáticas formales, las palabras encerradas entre <palabra>  deben ser definidas; 

"::=" equivale a "->" y "|" tiene el mismo significado. 

en nuestro metalenguaje:
<oración> ::= <declarativa> | <interrogativa>
<declarativa> ::= <sujeto> <verbo> <complemento>
<sujeto> ::= <artículo> <nombre>
-
<interrogativa> ::= ¿ <verbo> <sujeto> <predicado> 


Esta notación específica se conoce como BNF (Backus Naur Form) desarrollada por John Backus alrededor de 1960. 
_____________



Para expresar repetición se usa la recursividad, por ejemplo:

<entero> ::= <entero> <dígito> | <dígito>

define a un entero como una secuencia de dígitos, con a lo menos un dígito.

A pesar de su estructura sencilla, BNF sirve para definir casi todos los lenguajes de programación.

____________________


Notación BNF extendida: Las extensiones siguientes permiten realizar descripciones más fáciles de los lenguajes:

  
      Sintaxis   
      Significado
     ::= 
      se define como 
     t' 
      el símbolo terminal t
     <nt> 
      el símbolo no terminal nt 
     (...)
     usado para agrupar  
     *
    cero o más repeticiones del elemento anterior 
     +
     una o más repeticiones del elemento anterior 
     [...] 
     elemento discrecional 
      | 
      alternativa de varias formas sintácticas válidas




_____________________


Diagramas sintácticos

Los diagramas sintácticos son una forma gráfica de expresar la BNF extendida. Cada regla está representada por un camino que va desde la entrada ubicada a la izquierda, hasta la salida, ubicada a la derecha. Cualquier trayecto desde la entrada a la salida representa un string generado por esa regla.
Las categorías sintácticas (no-terminales) se representan por rectángulos y los símbolos terminales por círculos u óvalos. Ejemplo:
Entero


________________________



SEGUNDO REPORTE

Manual para el lenguaje de programación Alef


Alef es un lenguaje de programación concurrente diseñado para sistemas de software. El manejo de excepciones, gestión de procesos y primitivas de sincronización son ejecutadas por el lenguaje. Los programas pueden ser escritos usando tanto variable compartida y paso de mensajes paradigmas.
En cuanto a las expresiones utiliza la misma sintaxis que C, pero el sistema de tipos es sustancialmente diferente. Alef apoya la programación orientada a objetos mediante la herencia estática y ocultar información. El lenguaje no ofrezcan servicios de recogida de basura, lo que los programas se espera que atiendan su propia memoria.
1 léxica
Compilación comienza con una fase del proceso previo. Un preprocesador C ANSI se utiliza. El preprocesador realiza archivo de inclusión y sustitución de macro. Los comentarios y las líneas que empiezan con el carácter # son consumidos por el preprocesador. El preprocesador produce una secuencia de fichas para el compilador.
1,1 Tokens
El analizador léxico clasifica fichas como: datos, typenames, palabras clave, constantes y operadores. Los créditos son separados por espacios en blanco, que se ignora en la fuente excepto cuando sea necesario a las secuencias separadas de fichas que de otro modo serían ambiguas. El analizador léxico es codicioso: si las fichas se han consumido hasta un determinado carácter, entonces el siguiente token se la cadena más larga posterior de caracteres que constituye un símbolo jurídica.




1.2 Palabras reservadas
Las siguientes palabras son reservados por el idioma y no se pueden utilizar como identificadores:

ADT Aggr Alloc
alt se rompen
chan caso de bytes
comprobar continuar por defecto
hacer otra enumeración
extern float de
goto si int
Ninguna pelusa pasante
aumentar la par proc
sint retorno de rescate
sizeof cambio de tarea
typeof typedef tupla
unalloc ulint uint
unión vacío SINA
mientras Zerox

Los siguientes símbolos se utilizan como separadores y los operadores en el lenguaje:

+ - / =
> <! %
Y |? .
"'()
[] ()
*;



Las siguientes secuencias de caracteres multi-se utilizan como operadores:

+ = -= / = *=
% = & = | = ^ =
<<=>> = ==! =
- <- -> + +
::: =


1,3 Comentarios
Los comentarios son eliminados por el preprocesador. Un comentario empieza con los caracteres / * y termina a los caracteres * /. Un comentario puede incluir cualquier secuencia de caracteres, incluyendo / *. Los comentarios no se anidan.
1.4 Identificadores
Un identificador, también llamado nombre de léxico, es cualquier secuencia de caracteres alfa numéricos y el guión bajo _ carácter. Identificadores no pueden comenzar con un dígito. Identificadores distinguen entre mayúsculas y minúsculas. Todos los personajes son importantes. Identificadores comienzan con la cadena ALEF están reservados para su uso por el sistema de ejecución.
1.5 Constantes
Hay cinco tipos de constantes: constantes: const enteros carácter flotante const const const cadena-runa-cadena-const Una constante entera es una secuencia de dígitos. Un prefijo puede ser usado para modificar la base de un número. Prefijos definidos , bases, y establece dígitos son:

ninguno decimales 0-9
0x hexadecimales 0-9 AF AF
octal 0 0-7

Una constante de carácter contiene uno o más caracteres rodeado de comillas simple '. Si la constante contiene dos o más personajes de la primera debe ser el \ carácter de escape. La siguiente tabla muestra los caracteres válidos después de un escape y el valor de la constante:

0 NUL Null carácter
n NL Newline
CR r Retorno de carro
HT t tabulador horizontal
b BS Retroceso
F FF Avance
un pitido BEL
v ficha VT vertical
\ \ Barra invertida
"" Doble cotización
Las constantes de caracteres tienen el tipo int.


1.6 Programas
Un programa de Alef es una lista de declaraciones almacenados en uno o más archivos de código fuente. Las declaraciones introducir identificadores. Los identificadores pueden definir variables, tipos, funciones, prototipos de funciones, o los encuestadores. Identificadores han asociado clases de almacenamiento y su alcance (véase la sección 2). Para funciones y variables declaradas en el ámbito de archivo de la clase de almacenamiento determina si una definición se puede acceder desde otro archivo.
1.7 Procesos y Tareas
El proceso se utiliza el término para referirse a un hilo programado preventiva de la ejecución. Un proceso puede contener varias tareas. Una tarea es una forma preventiva, programada coroutine no dentro de un proceso. El modelo de memoria no define el intercambio de memoria entre procesos. En un equipo los procesos de memoria compartida normalmente comparten el mismo espacio de direcciones. En un multicomputador procesos pueden estar ubicados físicamente en los nodos distantes con acceso sólo a la memoria local. En tal sistema de procesos no compartiría el mismo espacio de direcciones, y debe comunicarse mediante paso de mensajes.
Un grupo de tareas de ejecución en el contexto de un proceso se define como en el mismo espacio de direcciones. Las tareas se han programado durante la comunicación y las operaciones de sincronización. El hilo término se utiliza allí donde la distinción entre un proceso y una tarea no es importante.
2 Definiciones y declaraciones
Una declaración introduce un identificador y especifica su tipo. Una definición es una declaración de que se reserva, de almacenamiento de un identificador. Un objeto es un área de memoria de tipo conocido producido por una definición. Prototipos de funciones, declaraciones de variables precedida por extern y especificadores de tipo son declaraciones. Las declaraciones de funciones con los órganos y las declaraciones de variable son ejemplos de definiciones.
2.1 Ámbito de aplicación
Los identificadores dentro de un programa tiene alcance. Hay cuatro niveles de alcance: local, función, tipo y disposición:
Un identificador local se declara en el comienzo de un bloque. Un local tiene alcance a partir de su declaración a la final del bloque en el que se hayan declarado.
identificadores de excepción y las etiquetas tienen el ámbito de una función. Estos identificadores se puede hacer referencia desde el inicio de una función a su fin, independientemente de la posición de la declaración.
Un miembro de un tipo complejo está en el ámbito sólo cuando un operador de desreferencia. O -> se aplica a un objeto del tipo. Tipo de miembros ocultos tienen un ámbito especial y sólo puede hacer referencia a miembros de la función del tipo.
Todas las definiciones fuera de un cuerpo de la función tienen el alcance de archivo. declaraciones sin reservas en el ámbito de archivo tiene la clase de almacenamiento estático.


2.2 Almacenamiento clases
Hay tres clases de almacenamiento: automático, de parámetros y estático. Automática objetos se crean en el acceso al bloque en el que hayan sido declarados. El valor de un indefinido es automático en la creación. Las variables automáticas son destruidos en la salida por categorías. Los parámetros son creados por la invocación de función y se destruyen a salir de la función. Los objetos estáticos existen desde la invocación del programa hasta que se termine. Los objetos estáticos que no han sido inicializadas tienen el valor 0.


Ejemplo
(int, byte*, byte)
func()
{
return (10, "hello", ’c’);
}
void
main()
{
int a;
byte* str;
byte c;
(a, str, c) = func();
}