PDF de programación - Construcción de un analizador de un lenguaje imperativo - Procesadores de Lenguajes - Practicas de laboratorio

Imágen de pdf Construcción de un analizador de un lenguaje imperativo - Procesadores de Lenguajes - Practicas de laboratorio

Construcción de un analizador de un lenguaje imperativo - Procesadores de Lenguajes - Practicas de laboratoriográfica de visualizaciones

Publicado el 25 de Septiembre del 2019
534 visualizaciones desde el 25 de Septiembre del 2019
1,6 MB
23 paginas
Creado hace 7a (18/09/2016)
PROCESADORES DE LENGUAJES



Prácticas de laboratorio

Curso 2016/2017

CONSTRUCCIÓN DE UN ANALIZADOR
DE UN LENGUAJE IMPERATIVO



Universidad de Alcalá
Dpto. Ciencias de la Computación
Asignatura 780018 2016-17


Pág. 1

Laboratorio de Procesadores de Lenguajes
Curso 2016/2017



Índice

1. Introducción .................................................................................................................. 3

2. Analizador Léxico........................................................................................................... 3

Especificaciones Léxicas ............................................................................................... 3

3. Analizador Sintáctico ..................................................................................................... 6

Especificaciones Sintácticas .......................................................................................... 6

4. Analizador Semántico.................................................................................................... 9

5. Evaluación de la práctica ............................................................................................. 13

Elementos a entregar por el alumno .......................................................................... 14

Calificación .................................................................................................................. 15

6. ANEXO I - EJEMPLOS ................................................................................................... 17

7. ANEXO II GUÍA PARA LA REDACCIÓN ........................................................................ 21



Pág. 2





Laboratorio de Procesadores de Lenguajes
Curso 2016/2017



1.

Introducción

Se desea construir un analizador (léxico, sintáctico y semántico) para un
pequeño lenguaje imperativo cuyo único estructuras de control para la selección es
el comando ‘if’ y para la iteración el comando ‘while’. Las variables se declaran de
forma explícita como un entero o un booleano, y la semántica del lenguaje siguen
una fuerte disciplina con las expresiones.

Para el análisis de un lenguaje de programación, habitualmente, se divide en
dos partes, la parte léxica que describe las unidades más pequeñas con significado,
llamado tokens, y la parte de sintaxis que explica cómo se organizan los tokens en
los programas.

Primera Parte

2. Analizador Léxico

Especificaciones Léxicas

La parte léxica reconoce identificadores, números, operadores, signos de

puntuación, símbolos especiales y palabras reservadas.

EspLex 1.

El conjunto de las palabras reservadas del lenguaje es:
program, is, begin, end, var, integer, boolean, read,

write, skip, while, do, if, then, else, and, or, true,

false y not, las cuales generan el token correspondiente a cada una de
ellas.

También, existen una serie de tokens en la gramática, que permiten las

diferentes operaciones del lenguaje, y estos son:

EspLex 2.

Operador de asignación: Símbolo ‘:=’ .

EspLex 3.

Operadores de relación: Símbolos ‘<=‘ , ‘<‘ , ‘=‘ , ‘>‘ , ‘>=‘ y ‘<>‘.

EspLex 4.

Operadores matemáticos: Símbolos ‘+‘ , ‘-‘ , ‘*‘ y ‘/‘ .

EspLex 5.

Signos de puntuación: Símbolos ‘(‘ , ‘)‘ , ‘,‘ , ‘;’ y ‘:‘ .

EspLex 6.

letra y a
continuación pueden aparecer letras y números. Ejemplo: Ident01, a994.

Identificadores: Siempre comienzan por una

Pág. 3



Laboratorio de Procesadores de Lenguajes
Curso 2016/2017



No son sensibles a mayúsculas y minúsculas, lo que significa que “ident01”
e “IDENT01” son el mismo identificador.

EspLex 7.

Los valores de tipo entero (integer) están compuestos por una
secuencia con, al menos, un dígito y, opcionalmente, al principio, pueden
tener un símbolo (+ o -). Ejemplo: 4212, - 4212 ó +4212. Los valores de tipo
booleano (boolean) aceptan únicamente true o false.

EspLex 8.

Puede haber espacios y/o tabuladores en cualquier parte del

fichero a analizar.

EspLex 9.

Se considera un error léxicos la detección de un carácter no

definido.

Requisitos Léxicos

ReqLex 1.

Se deben presentar los errores detectados e indicar para cada
uno el número de línea y columna donde se ha producido. Estos errores
pueden mostrarse a medida que se detectan, o almacenarse en una lista y
mostrarlos al final del análisis.

ReqLex 2.

En la memoria justificativa se deberá incluir un Autómata Finito

Determinista (AFD) por cada una de las expresiones regular definidas1.

ReqLex 3.

El empleo o no de estados léxicos deberá justificarse en la

memoria justificativa.



ReqLex 4.

Al analizar el archivo que contenga un programa en el lenguaje
dado, creará una salida en pantalla con una lista de tokens que representan
los componentes atómicos significativas del programa.



1 Existen muchas herramientas que construyen AFD, ejemplos de ellas son: https://regexper.com/,
http://ivanzuzak.info/noam/webapps/fsm2regex/, http://www.regular-expressions.info/, etc.

Pág. 4

Laboratorio de Procesadores de Lenguajes
Curso 2016/2017



Ejemplo de entrada:

program switch is

var sum,k : integer;
var switch : boolean;

begin

switch := true; sum := 0; k := 1;
while k<10 do

switch := not(switch);
if switch then

sum := sum+k

end if;
k := k+1

end while;
write sum

end



Ejemplo de Salida del analizador léxico:

Análisis Léxico completado

[program,ide(switch),is,var,ide(sum),coma,ide(k),do
s_puntos,integer,punto_coma,var,ide(switch),dos_pun
tos,boolean,punto_coma,begin,ide(switch),asign,true
,punto_coma,ide(sum),asign,num(0),punto_coma,ide(k)
,asign,num(1),punto_coma,while,ide(k),comp,num(10),
do,ide(switch),asign,not,paren_izq,ide(switch),pare
n_der,punto_coma,if,ide(switch),then,ide(sum),asign
,ide(sum),mas,ide(k),end,if,punto_coma,ide(k),asign
,ide(k),mas,num(1),end,while,punto_coma,write,ide(s
um),end]



Pág. 5



Laboratorio de Procesadores de Lenguajes
Curso 2016/2017



3. Analizador Sintáctico

En esta fase se analiza la estructura de las expresiones utilizando como base la
gramática propuesta por el alumno. Con este análisis ya se puede determinar si
una estructura está bien o mal formada. El análisis que se realiza es jerárquico, es
decir, se lleva a cabo a partir de árboles de derivación que se obtienen de la propia
gramática.

Especificaciones Sintácticas

El lenguaje posee las siguientes especificaciones sintácticas:



EspSimt 1.

El identificador para el nombre del programa no puede ser

declarado en otro lugar en el programa más que al comienzo.


Un identificador de variable no puede ser declarado más de una

EspSimt 2.

vez.



EspSimt 3.

La conjunción o disyunción de expresiones lógicas utiliza los

operadores and y or respectivamente.



EspSimt 4.

Una expresión lógica negada, utiliza el operador not antes de

la expresión lógica entre paréntesis.



EspSimt 5.

La igualdad entre dos expresiones utiliza el operador "=". Las

dos expresiones comparadas deberán de ser del mismo tipo.



EspSimt 6.

La comparación entre dos expresiones de tipo entero utiliza los

operadores de relación.



EspSimt 7.

Las palabras reservadas no se pueden utilizar como nombre

para un identificador.



Pág. 6



Laboratorio de Procesadores de Lenguajes
Curso 2016/2017



EspSimt 8.


La precedencia de los operadores es, de menor a mayor

precedencia (todos los operadores asocian por la derecha) la siguiente:

1. or
2. and
3. not
4. Comparaciones
5. + y -
6. * y /

Requisitos Sintácticos

El analizador solamente ha de aceptar ficheros con extensión

ReqSimt 1.-
“.prog”.



ReqSimt 2.-

La definición de la gramática, para el lenguaje, deberá estar
libre de ambigüedades. El alumno se encontrará con el problema del ‘else
ambiguo’. Deberá indicar en la memoria justificativa cómo se ha resuelto
este problema en las definiciones de la gramática. Ej:

orden ::= if expr_booleana then orden
| if expr_booleana then orden else orden



ReqSimt 3.-

El analizador también debe ser capaz de detectar los errores

sintácticos, tales como:

a. Errores en la declaración de variables. Por ejemplo:

var sum k : integer (error en el nombre del identificador)

b. Expresiones mal formadas. Por ejemplo:

4 + + 5; ó id = (6 + 6;

c. etc.



ReqSimt 4.-

Cuando detecte un error, el analizador propuesto deberá

mostrar un mensaje que indique la línea donde se ha producido.

Al final del análisis, y en caso de haber encontrado errores, deberá
mostrar un informe con el número total de errores que se han producido,
tanto léxicos como sintácticos. Por el contrario, si el analizador hubiera
terminado sin encontrar ningún error deberá mostrar un mensaje
indicando que ha finalizado sin errores.

ReqSimt 5.-

El analizador debe ser capaz de recuperarse cuando encuentre

un error recuperable y continuar analizando el resto del programa.



Pág. 7



Laboratorio de Procesadores de Lenguajes
Curso 2016/2017



ReqSimt 6.-

Al analizar el archivo que contenga un programa en el lenguaje
dado, analizará las producciones creando un árbol de sintaxis abstracta
(AST) que represente la estructura del programa que mostrara por
pantalla, similar al ejemplo dado.



Ejemplo de entrada 2 :

program switch is

var sum,k : integer;
var switch : boolean;

begin

switch := true; sum := 0; k := 1;
while k<10 do

switch := not(switch);
if switch then sum := sum+k end if;
k := k+1

end while;
write sum

end



Ejemplo de Salida :



Análisis Sintáctico completado
AST resultado del analisis
program([decl(integer,[sum,k]),decl(boolean,[switch])],
  • Links de descarga
http://lwp-l.com/pdf16611

Comentarios de: Construcción de un analizador de un lenguaje imperativo - Procesadores de Lenguajes - Practicas de laboratorio (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad