Este documento proporciona una descripción detallada del lenguaje de programación RED, incluyendo su estructura básica, palabras reservadas, tipos de datos, operadores, comentarios, declaración de variables, estructuras de control de flujo como decisión e iteración, y un ejemplo de programa. Explica los conceptos fundamentales del lenguaje para programar de forma estructurada utilizando funciones y organizar el código de manera legible.
investigación de los Avances tecnológicos del siglo XXI
Descripción del lenguaje red
1. Compiladores IDescripción del Lenguaje REDDefinición y Gramática del Lenguajerapsware21/07/2010Lenguaje de programación 2T, definición y gramática del lenguaje, ejemplos y toda la descripción del lenguaje. Lenguaje de programación básico especialmente desarrollado para personas principiantes en el mundo de la programación, además ofrece características necesarias para desarrollar, pequeñas rutinas de programación de nivel intermedio, y de bastante facilidad.<br />Tabla de contenido TOC quot;
1-3quot;
Descripción del Lenguaje PAGEREF _Toc270360437 3Programas PAGEREF _Toc270360438 3Estructura básica de un programa PAGEREF _Toc270360439 3Cabecera PAGEREF _Toc270360440 3Diccionario de palabras reservadas PAGEREF _Toc270360441 4Símbolos especiales PAGEREF _Toc270360442 4Tipos de Comentarios PAGEREF _Toc270360443 5Los comentarios en el lenguaje RED, pueden ser puestos en cualquier parte del código, ya sea la final al inicio o en medio del código. Existen dos tipos de comentarios de una sola línea, utilizando las dos plecas (//) antes de escribir el comentario, y todo lo que se escriba después de estos es tomado como comentario, hasta que finalice la línea, cuando se escribe en otra línea ya no es tomado como comentario. PAGEREF _Toc270360444 6Tipos de datos fundamentales y su representación PAGEREF _Toc270360445 6Operaciones de entrada y salida básica PAGEREF _Toc270360446 7Entrada PAGEREF _Toc270360447 7Salida PAGEREF _Toc270360448 7Declaración e inicialización de variables PAGEREF _Toc270360449 7Para declarar variables utilizamos la siguiente sintaxis: PAGEREF _Toc270360450 9Nombres de Variables: PAGEREF _Toc270360451 9Para inicializar las variables recién creadas: PAGEREF _Toc270360452 9El bloque principal del programa PAGEREF _Toc270360453 10Los primeros programas PAGEREF _Toc270360454 10Tabla de operadores con asociatividad y precedencia PAGEREF _Toc270360455 10Estructuras de decisión e iteración PAGEREF _Toc270360456 11Decisión PAGEREF _Toc270360457 12Uso del Si PAGEREF _Toc270360458 12Iteración PAGEREF _Toc270360459 12Para PAGEREF _Toc270360460 12Ciclo Mientras PAGEREF _Toc270360461 13Declaración, definición y uso de métodos y funciones PAGEREF _Toc270360462 13Funciones: PAGEREF _Toc270360463 13Características especificas del lenguaje PAGEREF _Toc270360464 15Definición de Arreglos PAGEREF _Toc270360465 15Ejemplo de un programa en RED-2T PAGEREF _Toc270360466 16Estructura de un Programa en RED PAGEREF _Toc270360467 16Ejemplo de un Programa en RED PAGEREF _Toc270360468 17Gramática del lenguaje PAGEREF _Toc270360469 18<br />Descripción del Lenguaje<br />RED es un lenguaje que permite programar en forma estructurada. Esto significa que es posible dividir al programa implementando funciones, y organizarlo de manera tal que se pueda leer con facilidad. Esto último tiene que ver con una indentación, comentarios, nombres mnemotécnicos, etc. Aunque estas últimas características NO son imprescindibles en un programa RED.<br />Programas<br />RED define un tipo básico de archivo que se puede compilar. Los archivos de código fuente que se escriben con el editor (IDE) conviene que tengan la extensión (.red), al compilar estos programas tendremos archivos .exe<br />Estructura básica de un programa<br />Cabecera<br />Todos los programas tienen la misma estructura. Para indicar al compilador que se trata de un programa tenemos que escribir la palabra PROGRAMA seguida de un espacio y un nombre (que puede tener letras y números) y que tiene que terminar en un punto y coma. Por ejemplo:<br />Programa ejemploNumero6;<br />Es importante indicar que el nombre que le damos al programa tiene que seguir unas reglas ya que sino en caso contrario no será válido por el compilador:<br />El primer carácter tiene que ser una letra y no una cifra ya que en caso contrario el compilador se pensaría que es un número. Por ejemplo, no es válido el nombre siguiente:<br />Programa 6ejemplo;<br />El único carácter no alfanumérico valido es el guion bajo. No se admiten caracteres como exclamaciones o signos de interrogación, etc.<br />Tampoco se admiten vocales acentuadas o letras que no pertenezcan al alfabeto ingles. Por ejemplo ÿ y la ῆ no se admiten.<br />Finalmente, el nombre del programa no tiene que coincidir con otras variables o constantes del programa.<br />Diccionario de palabras reservadas<br />Esta es una lista de palabras reservadas y estas no pueden redefinirse o ser utilizadas como identificadores. Hay que tener en cuenta que no se pueden emplear las siguientes palabras para nombres de variables ya que son palabras reservadas para RED.<br />NombreDescripciónEnteroTipo de dato, que representa los números enterosDecimalTipo de dato, que representa los números decimalesCarácterTipo de dato, que representa caracteresLogicoTipo de dato, que representa los datos lógicosVarPrefijo para declarar una variableFuncionUtilizado para declarar funciones en el programaLeaFunción con la cual obtenemos un valor de el usuarioEscribaFunción con la cual escribimos en pantalla algoSiEstructura de decisiónSinoComplemento de la estructura de decisiónParaEstructura de iteraciónMientrasEstructura de iteración condicionadaRetorneEspecifica lo que retorna una funciónProgramaUtilizada para declarar un programa en REDVerdaderoValor lógicoFinDelimita el fin de un programaFalsoValor lógicoInicioIndica el inicio de un programaVacioTipo utilizado en las funciones donde no necesita que retorne nada<br />Todas las palabras reservadas dentro del lenguaje RED, pueden ser escritas sin importar si están en mayúsculas o en minúsculas o una combinación de estos, así como las variables, tomando en cuenta que una variable escrita en mayúsculas es la misma que escrita en minúsculas, así como las palabras reservadas.<br />Símbolos especiales<br />Los símbolos especiales son caracteres no alfabéticos, o pares de estos caracteres, que tienen significados fijos. Los siguientes caracteres son símbolos especiales:<br />SímboloDescripción/Símbolo aritmético utilizado para representar la división*Símbolo aritmético utilizada para representar la multiplicación+Símbolo aritmético utilizado para representar la suma-Símbolo aritmético utilizado para representar la resta%Símbolo utilizado para representar el MOD=Símbolo utilizado para representar la asignación,Símbolo utilizado para separar los parámetros de las funciones;Símbolo utilizado para representar el fin de línea dentro de un programa:Símbolo utilizado para definir los tipos de datos de las variables<Símbolo utilizado para representar el “menor que”>Símbolo utilizado para representar el “mayor que”<br />Los siguientes pares de caracteres también son símbolos:<br />SímboloDescripción&&Representa el Y lógico||Representa O lógico“ ”Utilizado para representar cadenas de texto‘ ’Utilizado para poner caracteres[]Utilizado en los arreglos()Utilizado en la funciones {}Utilizado para definir los límites de funciones y ciclos//Utilizado para comentarios de una sola línea/*Utilizado para comentarios de varias líneas y finaliza con el símbolo */==Representa la igualdad!=Representa la desigualdad<=Representa “menor o igual que” >=Representa “mayor o igual que” <br />Tipos de Comentarios<br />Los comentarios son ignorados por el compilador, excepto cuando su función es de separadores delimitando tokens adyacentes.<br />//Comentario de una línea/*Comentario de varias Líneas*/<br />Los comentarios en el lenguaje RED, pueden ser puestos en cualquier parte del código, ya sea la final al inicio o en medio del código. Existen dos tipos de comentarios de una sola línea, utilizando las dos plecas (//) antes de escribir el comentario, y todo lo que se escriba después de estos es tomado como comentario, hasta que finalice la línea, cuando se escribe en otra línea ya no es tomado como comentario.<br />Los comentarios de varias líneas, empiezan con la combinación de símbolos /*, seguido de cualquier combinación de letras y números así como de símbolos, ya que el compilador los omite, estos acepta hasta saltos de línea, hasta que se cierre con la combinación de símbolos */<br />Tipos de datos fundamentales y su representación<br />Los tipos de variables, llamados tipos de datos, se dividen en tres grandes grupos fundamentales:<br />Numéricos. Enteros o Decimales<br />Alfanuméricos. Caracteres<br />Lógicos. Solo pueden valer verdadero o falso<br />NombreRangoDescripciónEnteroNúmeros enteros comprendidosDecimalRepresenta números decimalesCaracter[a-zA-Z][0-9]Representa caracteres alfanumericosLogicoVerdadero-FalsoRepresenta valores lógicos<br />Nota: Existe un tipo especial llamado Vacio, este devuelve un valor indefinido, se utiliza en la funciones donde no necesitamos que devuelva nada, entonces en el tipo a retornar en las funciones se pone vacio.<br />Operaciones de entrada y salida básica<br />Entrada<br />Lea(<tipo>,<variable>);/*donde variable es cualquier tipo de variable donde se almacena lo que el usuario introducey tipo es uno de los tipos definidos en el lenguaje*///EjemploVar entero: num1;Lea(entero,num1);/*en la variable num1 se almacena lo que el usuario ingrese siempre que sea del tipo definido en la misma función en este caso tendría que ser del tipo entero*/<br />Salida<br />Escriba(<Expresion>);Escriba(“cadena”,<variable>,(3*5+2),función());/*Donde expresión puede ser una combinación tanto de variables cadenas de texto como de constantes numéricas, las cuales cada una de estas deben estar separadas por comas Ejemplo:*///EjemploVar entero: numero=23;Escriba(“hola mundo”,numero,(3+5),getedad());//donde getedad() es una función que retorna un entero<br />Declaración e inicialización de variables<br />Si pensamos en muchas formulas matemáticas veremos que emplean variables en su expresión. Por ejemplo el área del triangulo es AT=b*h . Cuando queremos calcular el área de un triangulo dado nos limitamos a sustituir estas variables. En RED, y programación ocurre algo parecido.<br />RED exige que se declaren las variables que se utilizaran. Las variables pueden modificar su valor a lo largo del programa. Cada variable tiene que ser de un tipo determinado.<br />Para declarar variables emplearemos la palabra reservada VAR, seguida de un espacio y luego el tipo de dato de la variable seguida de dos puntos y espacio y después el nombre de la variable. Por ejemplo:<br />Var entero: base;Var entero: altura=10;Var carácter: Lnombre=”a”;<br />Lo que va después del signo igual recibe el nombre de literal. Un literal es un valor incluido directamente en el código. El primer caso es el numero entero 10, la variable altura vale 10. En el caso de Lnombre representa un carácter con el valor “a”.<br />La declaración de literales se rige por unas normas sencillas:<br />Los caracteres siempre empiezan y terminan con las comillas y solo tiene un carácter, en caso contrario el compilador enviara un error.<br />Los caracteres pueden aceptar más de un carácter en caso de que sea una combinación de tabulación “” o salto de línea “”, solo en este caso es aceptado más de un carácter.<br />Los números enteros se escriben de manera normal respetando el tamaño máximo y mínimo establecido.<br />Los números decimales deben ir acompañados del signo de punto y la cantidad de decimales y enteros que desee, respetando el tamaño máximo y mínimo establecido.<br />En RED, los nombres de constantes es indiferente de que estén en mayúsculas o minúsculas. Por tanto, en el ejemplo anterior altura, ALTURA, ALtuRa representan lo mismo para el compilador. Hay que ir con cuidado para no duplicar nombres. Por ejemplo, esto es incorrecto:<br />Var entero: maximo;Var entero: MAXIMO;<br />Ya que MAXIMO y máximo son lo mismo y se esta redeclarando una variable ya declarada. Esta independencia sintáctica a las mayúsculas está presente en todos los aspectos de RED.<br />La declaración anterior se podía haber simplificado de la siguiente forma:<br />Var entero: base, altura;Var caracter: Lnombre;<br />Podemos declarar dos o más variables del mismo tipo a la vez separándolas entre comas.<br />Para declarar variables utilizamos la siguiente sintaxis:<br />Var <tipo>: <nombre>;Var <tipo>: <nombre1>,<nombre2>,…<nombreN>;//ejemploVar carácter: a, cvar;Var entero: numero1;Var lógico: continuar, avance;Var decimal: real;<br />Nombres de Variables:<br />Los nombres de variables deben iniciar con una letra seguida de cualquier combinación de números o letras.<br />Los nombres de variables no deben ser los mismos que las palabras reservadas definidas en el lenguaje.<br />Los nombres de variables no deben contener ningún de los símbolos especiales, definidos en el lenguaje, en cambio puede utilizar cualquier otro símbolo.<br />Para inicializar las variables recién creadas:<br /> <nombreVariable>=<Valor>;//ejemploNumero=34;A=”b”;Avance=verdadero;Real=23.45;<br />El bloque principal del programa<br />Una vez hemos declarado la etiqueta programa, y las declaraciones de variables solo falta el bloque principal de código del programa. El bloque donde se ejecutaran las ordenes.<br />Este bloque, a diferencia de los anteriores, no se puede dejar de poner en un programa RED. El bloque principal del programa se define entre las palabras INICIO y FIN. Por ejemplo estas dos líneas ya son un programa valido para el compilador aunque no haga nada:<br />Iniciofin<br />Es entre estas dos palabras que incluiremos nuestro código. Todas las órdenes que se incluyen en este bloque reciben el nombre de sentencias.<br />Los primeros programas<br />Vamos a hacer un programa que calcule el área de un triangulo dadas las bases y la altura. El código podría ser el siguiente:<br />Var entero: base, altura;Var caracter: Lnombre;<br />Tabla de operadores con asociatividad y precedencia<br />OperadorAsociatividad+Por la izquierda-Por la izquierda*Por la izquierda/Por la izquierda%Por la izquierda<br />Orden de precedenciaOperadores1Las operaciones entre paréntesis2Raíces o potencias3Multiplicaciones o divisiones4Sumas o restas5Si hay dos o más operadores del mismo orden entonces se usa la asociatividad por la izquierda<br />Estructuras de decisión e iteración<br />Antes de iniciar con las estructuras de decisión e iteración, se deben conocer los operadores de las condiciones que son la base de las siguientes estructuras a ver.<br />OperadorSignificado<Menor que>Mayor que<=Menor o igual que>=Mayor o igual que==Igual!=Distinto de<br />Hay que tener claro que la diferencia entre “=” y”==” es, que el primero compara dos variables y el segundo es una asignación de valores.<br /> A continuación se presenta una tabla con los operadores para cuando hay más de una condición a evaluar.<br />OperadorSignificado&&“Y” lógico||“O” lógico<br />Decisión<br />Uso del Si<br />Si(condicion){Bloque de instrucciones}Sino{Bloque de instrucciones}/*donde bloque de instrucciones puede ser un conjunto de ciclos u operaciones y llmados a función etc., además de tener otros ciclos Si*///ejemploSi(numero < 15 || numero==0){Escriba();}sino{Si(numero>30 && numero < 45){Escriba();}sino{Escriba();}}<br />Iteración<br />Para<br />Para(<Variable>=<valor inicial> ; <restricción de limite>; <expresión de incremento>){Bloque de instrucciones;}//el bloque de instrucciones puede contener lo mismo que el bloque de instrucciones que el ciclo Si*///ejemploPara(i=0;i < 10; i=i+1){Escriba();}<br />Ciclo Mientras<br />Mientras(<Condicion>){Bloque de instrucciones;}//el bloque de instrucciones puede contener lo mismo que el bloque de instrucciones que el ciclo Si*///ejemploMientras(numero !=0){Escriba();}<br />Dependiendo de la condición, la instrucción puede variar pero esta instrucción es vital para evitar ciclos infinitos.<br />Declaración, definición y uso de métodos y funciones<br />RED por supuesto tiene lo que es el uso de procedimientos y funciones, ahora definiremos por separado cada uno de estos módulos.<br />Funciones:<br />Una función es un modulo de un programa separado del cuerpo principal, que realiza una tarea específica y que puede regresar un valor o no, a la parte principal del programa u otra función o procedimiento que la invoque.<br />Declaración y Definición de las Funciones<br />//Declaración de FunciónFuncion <Tipo> <NombreFuncion>(parámetros);//Definición de FunciónFuncion <Tipo> <nombre funcion>(parámetros){Declaracion de variables localesBloque de instrucciones;Retorne <Valor>;}/* en el caso especial donde no se deba regresar ningún valor donde dice tipo se pone la palabra reservada Vacio, y no se necesita poner Retorne dentro de la función.La declaración de variables se debe de hacer antes de que se inicie el bloque de instrucciones, de lo contrario tirara un error, y estas variables son validas únicamente en la funcion*///ejemploFunción entero getEdad(entero,entero);Función entero getedad(entero: num1, entero: num2){Retorne valor;}<br />Este esquema de la definición y declaración se hace en la sección de Var del programa principal, donde parámetros está definido de la siguiente forma:<br />(<tipo>:<nombre_var>,<tipo>:<nombrevar2>,…)//ejemploEntero: num1, entero: num2<br />Uso<br />Simplemente en el programa principal se hace llamado a función.<br />//llamado a una función desde el programa principal o desde otra función[<variable>]=<nombrefuncion>(parametros);/*En el caso de retornar algo poner la variable en la que se guardara el valor de retorno de lo contrario solo se llama a la función*///ejemploVcadena=getedad(num1,num2);<br />Características especificas del lenguaje<br />Definición de Arreglos<br />Para declarar un arreglo se usa el siguiente formato:<br />Var <Tipo>:<nombre arreglo>[expresion];/*donde expresion puede ser una constante una combinación de operaciones matematicas o una variable con valores enteros//ejemploVar entero: arreglo[5];<br />Para asignar un valor a un arreglo es de la siguiente forma:<br /><nombre arreglo>[constante]=<Valor>;//donde constante es el índice del arreglo, alque se desean introducir datos, el índice en los arreglos empieza desde 0 hasta el numero antes del que se definió al declarar el arreglo//ejemploArreglo[i]=23;<br />Donde constante es una numero entero el cual define la posición del arreglo.<br />Ejemplo de un programa en RED-2T<br />Estructura de un Programa en RED<br /><Nombre de programa>*< REF _Ref270199318 Declaración e inicialización de variables>< REF _Ref270199343 Declaración, definición y uso de métodos y funciones><Definición del programa principal>**<Definición de funciones><Definición de procedimientos><br />*: El nombre del programa y como inicia todo programa en RED, inicia con la palabra reservada PROGRAMA, y seguido de el nombre para el programa utilizando las mismas reglas que los nombres de variable, luego se finaliza la línea con “;” que indica el fin de la línea.<br />**: La definición del programa principal es donde inicializamos y utilizamos las variables, constantes funciones y procedimientos, así como de todos los ciclos y demás componentes del lenguaje RED. Este debe de ir siempre en cualquier programa en RED, siempre empieza con la palabra reservada INICIO, y finaliza con la palabra FIN, dentro de estas instrucciones definimos nuestro programa principal.<br />Ejemplo de un Programa en RED<br />Programa ejemplo;Var Entero ventero,i;Var Entero arreglo[2];Var Carácter vcaracter;Var Decimal vreal;Funcion Entero Suma(Entero,Entero);Procedimiento Imprime(Entero);InicioPara(i=0 Hasta 2){Escriba(“Escriba un numero: ”);Lea(ventero1);arreglo[i]=ventero1;}Imprime(Suma(arreglo[1],arreglo[2]));Ventero1=arreglo[1];ventero2=arreglo[2];Si(ventero1 > ventero2){Escriba(“el mayor es: ”,ventero1);}Sino{Escriba(“El mayor es: ”,ventero2);}FinFuncion Entero Suma(Entero: num1,Entero: num2){Retorne num1+num2;}Procedimiento Imprime(Entero: num){Escriba(num);}<br />Gramática del lenguaje<br />1Gramatica->DeclaracionesDefiniciones2Declaraciones->CabeceraCuerpo3Cabecera->PROGRAMA ID;4Cuerpo->DeclaracionVariablesDeclaracionFunciones5DeclaracionVariables->LineaVar DeclaracionVariables6LineaVar->VAR Tipo: LVar7LVar->Lid LVar28LVar2->,LVar | ;9LId->ID L2Id10L2Id->= ValorT | [Expresion] | λ11ValorT->Expresion | VLogico | VCaracter12DeclaracionFunciones->FUNCION vRetorno ID( LParam );13vRetorno->Tipo | VACIO14cRetorno->RETORNE ValorT ; | λ15LParam->L2Param LParam | λ16L2Param->Tipo L3Param17L3Param->, | λ18LParametros->L2Parametros LParametros | λ19L2Parametros->Tipo : ID L3Parametros20L3Parametros->, | λ21Definiciones->PPrincipalDefinicionFunciones22PPrincipal->INICIODeclaracionVariablesBloqueInstruccionesFIN23DefinicionFunciones->FUNCION vRetorno ID( Lparametros ){DeclaracionVariablesBloqueInstruccionescRetorno }24BloqueInstrucciones->LBloque BloqueInstrucciones | λ25LBloque->Asignacion | Lectura | Escritura | Decisión | Iteracion | BloCod | LlamFunc26Asignacion->ID TVar DAsignacion ;27TVar->= | [ Expresion ]=28DAsignacion->ValorT | LlamFunc ;29LlamFunc->ID( LisPram )30LisParam->ID Lis2Param31Lis2Param->,LisParam | λ32Lectura->LEA( Tipo, ID);33Escritura->ESCRIBA( LisEsc );34LisEsc->Lis Lis2Esc35Lis2Esc->,LisEsc | λ36Lis->ValorT | LlamFunc | Cadena37BloCod->BLOQUE{DeclaracionVariablesBloqueInstrucciones}38Iteracion->CicloMientras | CicloPara39CicloMientras->MIENTRAS( Condicion ){BloqueInstrucciones}40CicloPara->PARA(ID=Expresion ; ID OperC Expresion ; Asignacion){BloqueInstrucciones}41Decisión->IR | IA | BloqueInstrucciones42IR->SI( Condicion ){IR}SINO{IR}| λ43IA->SI( Condicion ){Decisión} | SI( Condicion ){IR}SINO{IA}44Condicion->45Tipo->ENTERO | DECIMAL | CARÁCTER | LOGICO46OperC->47Expresion->Terminal ExpresionP48ExpresionP->+Terminal ExpresionP | -Terminal ExpresionP | λ49Terminal->Factor TerminalP50TerminalP->*Factor TerminalP | /Factor TerminalP | λ51Factor->( Expresion ) | Num | ID52VLogico->53VCaracter->54Num-><br />