Hacer el analizador léxico del siguiente lenguaje usando ANTLR.
Sintáctico
Hacer el árbol AST:
Decir si es una sentencia válida y hacer el árbol concreto:
Dada la siguiente gramática, implementar un parser de la misma utilizando la técnica recursiva descendente.
Hacer una especificación ANTLR para un lenguaje con las siguientes características:
Una entrada tendrá sólo una única sentencia ‘print’ seguida de una expresión y un punto y coma.
Primero implementamos el léxico del lenguaje:
Ahora la gramática:
Crear la gramática abstracta para el lenguaje del ejemplo.
Dada la siguiente especificación sintáctica en ANTLR y la gramática abstracta que define los nodos del AST, añadir la especificación de ANTLR el código que cree el AST de las entradas:
Abstracta:
Hacer una gramática en BNF de un lenguaje con las siguientes características:
Un conjunto está formado por uno o más elementos entre paréntesis separados por comas.
Cada elemento puede ser un número u otro conjunto.
Los números están formados por dígitos de 1 al 3, pudiendo haber espacios entre ellos. Suponer que el analizador léxico devuelve los tokens UNO, DOS y TRES.
Los números están formados por un número impar de dígitos y son capicúa.
Se pide hacer una gramática BNF usando las construcciones anteriores. Anotar en cada regla qué construcción sigue.
Sea un lenguaje para la definición de variables.
Requisitos:
Sólo hay dos tipos: entero (int) y real (double).
En una sola definición, pueden definirse varias variables del mismo tipo.
En un programa puede haber varias definiciones, pero también sería válido que no hubiera ninguna.
Se pide especificar la sintaxis de dicho lenguaje en BNF y en EBNF.
Dada la gramática en ANTLR y la gramática abstracta siguientes, añadir al fichero de ANTLR las acciones que construyan el AST.
Solución:
Semántico
Dada la siguiente CFG, definir una gramática atribuida para realizar la fase de Identificación. Nota, se puede usar el objeto st del ejercicio anterior.
(G):
Comprobar que las funciones tengan return en la siguiente gramática. Crear la AG correspondiente:
Solución:
Generación de código
Dado el siguiente programa de alto nivel:
Escribir el código destino MAPL.
Suponer que:
Las direcciones de memoria de a y b son 0 y 2
Ambas son variables enteras
Implementar las plantillas de código para las asignaciones. Usar la (G) del ejercicio anterior.
Define las plantillas de código para apilar el valor de las siguientes expresiones:
Especificar las plantillas de código de los arrays.
Estas plantillas vienen de esta explicación:
Especificar las plantillas de código para calcular las direcciones de memoria de los campos de los registros
Escribir la plantilla de código de un bucle While.
Escribir la plantilla de código de un bucle Do/While.
Escribir la plantilla de código de un bucle For.
Escribir la plantilla de código de un If/Else.
Escribir las plantillas de código para la invocación de funciones.