UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE CIENCIAS MATEMATICAS
ESCUELA ACADEMICA PROFESIONAL DE COMPUTACION CIENTIFICA
_________________________________________________
LENGUAJE LMS
Ciencias de la Computación IV
ALUMNAS
Carrasco, Herrera, Luz Pilar 11140343
Martel Solís, Leyla Katiuska 12140487
Perales Apaico, Flor Amalia 11140366
CICLO 2018-II
INDICE
Resumen
Introducción
Objetivos
Marco teórico
Descripción del Lenguaje
Análisis Lexicográfico
Análisis Sintáctico
Conclusión
Referencias bibliográficas
Glosario
RESUMEN
El lenguaje LMS, como cualquier otro lenguaje, tiene definido sus componentes
léxicos en base a letras, números y símbolos, las cuales han sido especificados. Luego
de las especificaciones, se realiza un análisis lexicográfico cuya función es verificar
que cada lexema corresponde a un componente léxico definido, luego se realiza un
análisis sintáctico cuya función es verificar que las expresiones cumplan con las
reglas gramaticales.
Palabras claves: Lenguaje y Compilador, lenguajes de programación, traductores de
lenguaje, lenguaje formal.
INTRODUCCION
En estos tiempos, los lenguajes de programación se han puesto de moda a nivel
mundial, debido a la demanda por sus diferentes funcionalidades y beneficios en los
respectivos campos de trabajos, es así que ahora crearemos un lenguaje partiendo de
lo más básico, que es con las especificaciones, claramente está que es un proceso; por
lo cual se ira avanzando con las indicaciones respectivas hasta culminarlo y lograr
obtener un compilador.
Esto es parte de un proyecto del curso Ciencias de la Computación IV a cargo del Prof.
Augusto Cortez Vásquez.
OBJETIVOS
Especificar un lenguaje formal de manera clara y sencilla
Especificar e implementar un compilador
1. MARCO TEORICO
LENGUAJE NATURAL
Es el lenguaje hablado o escrito que se caracteriza porque está cambiando
constantemente.
LENGUAJE FORMAL
Es una especialización del lenguaje natural, como el conjunto finito de palabras que
están formadas por caracteres o símbolos. Con estos se construye los lenguajes de
programación.
LENGUAJES DE PROGRAMACIÓN
Es un lenguaje que posee una determinada estructura, contenido y uso de forma
práctica para que los humanos puedan dar instrucciones a un computador.
TRADUCTOR
Es aquel proceso de conversión desde un texto o programa escrito en un lenguaje
fuente a un programa equivalente (lenguaje maquina), se identifican dos fases
principales: fase de análisis y fase de síntesis, se dividen en compiladores e intérpretes.
COMPILADOR
Es un tipo de traductor en el que el lenguaje fuente es un lenguaje de alto nivel (aquel
que se aproxima más al lenguaje natural humano), por ejemplo, C++.
2. DESCRIPCIÓN DEL LENGUAJE
LENGUAJE LMS
Este lenguaje es parte del proyecto del curso Ciencias de la Computación IV 2018-II,
cuyo fin es obtener un compilador; los avances que se realicen se plasmaran en este
informe, trataremos de ser lo más claras posible.
ESPECIFICACIONES
Elementos del lenguaje.
2.1 Caracteres válidos:
Letras mayúsculas A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T,
U, V, W, X, Y, Z.
a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y,
Letras minúsculas
z
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Numéricos
Caracteres especiales {}, (), [], * ,+ ,- ,/, : ,; ,< ,> ,= , “”, ‘’,! ,$ ,% , | ,<= , >=,.
2.2 Operaciones:
Operaciones aritméticas Operador
+
Adición
-
Sustracción
*
Multiplicación
/
División
Operador
Operaciones lógicas
$
Conjunción
|
Disyunción
Negación
Operación de asignación Operador
=
Igual
Operaciones relacionales Operador
<
Menor
>
Mayor
<=
Menor que
>=
Mayor que
==
Igual
Diferente
2.3 Sentencias:
Sentencia de entrada
INGRESAR
Sentencia declarativa TIPO DE VARIABLE ID
SI
Sentencia condicional
SINO
FIN
PARA
Sentencia iterativa
MOSTRAR
Sentencia de salida
2.4 Tipos de datos:
Variables Entero
Real
Booleano
Cadena
Caracter
2.5 Tipos de variables:
Constante numérica entera 7,30,121,7038
Pi=3.1416
Constante numérica real
Constante alfanumérica “ciencia”, ‘3’
2.6 Palabras reservadas:
o Palabra que tiene un significado concreto en un lenguaje de programación sin
necesidad de que lo asignemos nosotros, como, por ejemplo:
ENTERO
REAL
BOOLEANO
CADENA
CARACTER
FUNCION
INICIO
FIN
INGRESAR
SI
SINO
PARA
MOSTRAR
2.7 Identificadores:
o Son símbolos léxicos que nombran entidades, para denominar algo en el lenguaje.
o El primer símbolo del identificador será un carácter alfabético (a,…,z,A,…Z,’_’).
Después de ese primer carácter podremos poner caracteres alfanuméricos (a,….,z) o
(1,…,9) y el guion subrayado (‘_’).
o Las mayúsculas y las minúsculas se consideran diferentes.
o Los identificadores no pueden coincidir con las palabras reservadas.
Ejemplos válidos:
a, jose, total, cte_luz
Ejemplos no válidos:
34, cte Luz, _suma
2.8 Comentarios:
o Cualquier secuencia de caracteres que comienzan con /*
o El comentario termina cuando se encuentra el par */
o No es posible introducir comentarios dentro de otro.
Las expresiones de las sentencias de entrada, declaración, iterativas y salidas, además de
las operaciones, finaliza con dos puntos (:).
2.9 Espacios en blanco
o Este lenguaje utiliza los espacios en blanco como separadores de los componentes
léxicos.
2.10 Delimitadores
o Se utilizan símbolos de agrupamiento como paréntesis, llaves o corchetes para
agrupar expresiones.
2.11 Estructura de un programa
Estructura que deben seguirse al escribir el código fuente para considerarse como correcto.
FUNCION Nombre_de_la_funcion()
INICIO
{
SENTENCIA DE DECLARACION:
SENTENCIAS DE ENTRADAS: Cuerpo del programa
(instrucciones)
OPERACIONES:
SENTENCIAS DE SALIDAS:
}
FIN
Ejemplo:
FUNCION perimetro()
INICIO
{
ENTERO a, b, c, p:
INGRESAR a:
INGRESAR b:
INGRESAR c:
p = a +b + c:
MOSTRAR p:
}
FIN
2.12 Sintaxis
3. ANÁLISIS
3.1. ANALIZADOR LEXICOGRÁFICO
Definición. Explora y verifica que cada lexema corresponda a un componente léxico
definido.
Componentes léxicos válidos en el lenguaje LMS
Componente Léxico Símbolo Patrón
Identificador Id L(L/D)*
Constante numérica entera cne DD*
Constante numérica real cnr DD*.DD*
Palabras reservadas Pr
Operadores aritméticos Oarit +,-,*,/
Operadores lógicos Olog $,|,~
Operador de asignación Oasig =
Operadores relacionales Orel <,==,>,!,<=,>=
Paréntesis izquierdo (
Paréntesis derecho )
Corchete izquierdo [
Corchete derecho ]
Llave izquierda {
Llave derecha }
Punto y coma ;
Punto .
Coma ,
Dos puntos :
Comilla doble izquierda “
Comilla doble derecha ”
Comilla simple izquierda ‘
Comilla simple derecha ’
A continuación, mostraremos el análisis lexicográfico de nuestro antes mencionado ejemplo.
FUNCION perimetro()
INICIO
{
ENTERO a, b, c, p:
INGRESAR a:
INGRESAR b:
INGRESAR c:
p = a +b + c:
MOSTRAR p:
}
FIN
LEXEMA COMPONENTE LEXICO
FUNCIÓN Palabra reservada
Perímetro Identificador
( Paréntesis izquierdo
) Paréntesis derecho
INICIO Palabra reservada
ENTERO Palabra reservada
INGRESAR Palabra reservada
A Identificador
: Dos puntos
INGRESAR Palabra reservada
B Identificador
: Dos puntos
INGRESAR Palabra reservada
C Identificador
: Dos puntos
P Identificador
: Dos puntos
A Identificador
= Operador de asignación
3 cne
: Dos puntos
B Identificador
= Operador de asignación
4 cne
: Dos puntos
C Identificador
= Operador de asignación
5 cne
: Dos puntos
P Identificador
= Operador de asignación
A Identificador
+ Operador aritmético
B Identificador
+ Operador aritmético
C Identificador
: Dos puntos
MOSTRAR Palabra reservada
P Identificador
: Dos puntos
Fin Palabra reservada
Tomar en cuenta que, durante el proceso de análisis, se eliminan los espacios en
blanco.
3.2. ANALIZADOR SINTÁCTICO
Definición. Verifica que las expresiones que conforman la entrada cumplan con las
reglas gramaticales.
Tomando el ejemplo anterior, se mostrará el análisis sintáctico.
P FUNCION ID INICIO CUERPO
SD ; SP ; SD
CUERPO
D / D ; SD
SD
TIPO LISTA_ID
D
ENTERO
TIPO
ID / ID , LISTA_ID
LISTA_ID
P / P ; SP
SP
SL / SE / SA
P
SL INGRESAR LISTA_ID
ID = E
SA
E / E OP E
E
MOSTRAR E
SE
+
OP
Diagrama de Conway
FUNCION ID INICIO CUERPO FIN
CUERPO
SD : SP :
SD
D : SD
TIPO LISTA_ID
TIPO
ENTERO
Lista_ID
ID
ID , SP
SP
P _: SP
SL SE SA
SL
INGRESAR LISTO_ID
SA
ID = E
E OP E
SE
MOSTRAR E
OP
+
CONCLUSION
Al especificar el lenguaje, debemos tener en cuenta las letras, números y
símbolos que consideraremos, además de la función que se le asignara.
Es importante tener claro la función que realiza el análisis lexicográfico y el
análisis sintáctico, además en este último se puede expresar de varias formas,
como, por ejemplo: el diagrama de Conway, arboles de derivación, etc.
REFERENCIAS BIBLIOGRÁFICAS
Augusto Cortez Vásquez (2013). Lenguaje y Traductores. UCSS: Fondo Editorial
UCSS.
María del Mar Aguilera Sierra & Sergio Gálvez Rojas. Traductores,
Compiladores e Intérpretes, de LCC-UMA Sitio web:
[Link]
Sergio Gálvez Rojas y Miguel Ángel Mora Matta (2005). Compiladores.
Universidad de Málaga.
Gloria Inés Álvarez V. Compiladores: Análisis Léxico, de Pontificia Universidad
Javeriana Cali Sitio web:
[Link]
on5_2008-[Link]
Nicolás Luis Fernández García. Procesadores de Lenguajes. Universidad de
Córdoba
Universidad Europea de Madrid (UEM). Introducción a compiladores y
lenguajes formales.
Jacinto Ruiz Catalán. Compiladores (2010). Teoría e implementación. RC
Libros.
GLOSARIO
Código Fuente. Se le da el nombre de código fuente a los programas escritos en un
determinado lenguaje de programación y que está compuesto por instrucciones escritas por
un programador. El código fuente no constituye software propiamente dicho, pero es una
instancia mediante la cual se logra el software.