Giter Site home page Giter Site logo

2flex1cup's People

Contributors

maes95 avatar pablofuente avatar

Watchers

 avatar  avatar  avatar

2flex1cup's Issues

For

FOR : Sólo puede utilizarse una variable de tipo entero como contador del bucle. Las expresiones que delimitan los índices inferior y superior deben ser de tipo entero.

Anclas variables, procedimientos y funciones

Las variables, procedimientos y funciones utilizadas en el código deben estar enlazadas (elemento HTML ...) con su correspondiente declaración:

  • Cabecera en caso de tratarse de una función, procedimiento o parámetro.
  • Sentencia de declaración en caso de tratarse de una variable declarada dentro del código de una función o procedimiento

Por lo tanto para la utilización de los identificadores habrá que sustituir el estilo "ident" usado en la parte obligatoria por el elemento de enlace descrito anteriormente, pero sólo en su utilización. En la declaración de los identificadores habrá que incluir un "ancla" (elemento HTML ) que sirva como destino de los enlaces, junto con el estilo de los identificadores ... usado hasta ahora.

Cambio "Programa principal"

El programa principal pasará a ocupar el primer lugar en el listado de funciones y procedimientos, apareciendo su código por lo tanto antes del código de cualquier otra función o procedimiento.

Registro

REGISTRO : No se permite realizar asignaciones entre variables de tipo registro. Los registros deben ser copiados campo a campo.

Matrices

MATRICES : En las declaraciones, el tamaño de la matriz se define como un intervalo. Este intervalo debe definirse con números enteros y no debe ser vacío (el límite inferior debe ser estrictamente menor que el límite superior). Los índices de la matriz deben ser de tipo entero. No se permite la asignación directa de arrays, éstos deben ser copiados elemento a elemento.

Memoria

Apartados de la memoria

  • Funcionamiento del traductor : HTMLGenerator y sus métodos y atributos
    • Clase Method
    • Variables destacadas (almacenamiento, estado)
    • Métodos constructores de elementos del HTML
    • Métodos de creación del fichero HTML
    • Métodos auxiliares
    • Bloques CSS, librerías, Scripts
  • Nivel de indentación
  • Tratamiento y salida de errores
  • Anclas y enlaces
  • Comprobación de tipos

¿Tipos de datos para String?

Tenemos que ver si es necesario un tipo de datos especifico para STRINGS, que en Pascal seria:

palabra : string [80];

Podría entrar dentro de TBAS como "string_name"

While - If

WHILE_IF : Esta sentencia está gobernada por una expresión que debe ser de tipo booleano.

Mejora de Indentación

  • Las sentencias incluidas en los bloques (símbolo BLQ de la gramática) deben tener un nivel mayor de indentación que las palabras reservadas "begin" y "end" que delimitan ese bloque. Del mismo modo que cada caso (símbolo gramatical CASELIST) de las sentencias CASE.
  • Cada sentencia de declaración de constantes (contenido de CTELIST terminado con ;) y variables (contenido de DEFVARLIST terminado con ;) aparecerá en una línea diferente y con un nivel de indentación mayor a las palabras reservadas const y var respectivamente.
  • Lo mismo pasará con las declaraciones de tipos de datos matriz y registro, con respecto a la palabra reservada type. Además, la declaración de los campos de un registro tendrá a su vez otro nivel más de indentación.
  • Todo el código correspondiente a las funciones y procedimientos declarados dentro de otras funciones o procedimientos, incluido cabecera, begin y end, tendrán un nivel de indentación mayor al de la función o procedimiento donde se declaren.

Contenido de la MEMORIA

  • Especificación léxica:
    ¡¡¡¡¡ .FLEX Y .CUP DIRECTAMENTE METIDOS!!!!!!
  • Strings
  • Comentarios
  • Detección de errores léxicos: FALTA DE CIERRE DE COMENTARIO O DE STRING!!!!
  • También el método symbol para refactorizar y cómo devolvemos los valores que toman los tokens.
  • Especificación sintáctica:
  1. Warning: las palabras reservadas de Java no se pueden utilizar en la especificación porque si no luego falla terriblemente (obviamente el código generado es Java)
  2. Precedencias de símbolos terminales (prec left.....)
  3. Qué mostramos por pantalla para demostrar que funciona correctamente
  4. Detección de errores.
  5. Recuperación de los errores recuperables: ¿de cuales nos recuperamos?
  • Casos de prueba:
  • Otras cosas:
  1. Aclarar que hemos utilizado la versión actualizada de la gramática.

Implementar notificación de errores detallada

Para conseguir el NOTABLE 8 necesitamos una notificación de errores detallada:

.. notable (máximo 8), alcanzando el grado de aprobado, proporcionando notificación de errores detallada, ..

Dudas para PL

  1. ¿Sustituir OPCOMP por comparator_op en todas sus apariciones?
  2. Los errores léxicos: ¿deben ser irrecuperables (throw new RuntimeException) o debe ser posible seguir analizando?
  3. Comentarios: ¿unilínea o multilínea?
  4. Indentación??!

Implementar recuperación de errores

Para obtener un SOBRESALIENTE debemos implementar una recuperación de errores:

sobresaliente (máximo 9,5), alcanzando el grado de notable, implementando recuperación de errores

Para mas información: Recuperación de errores CUP

Más ejemplos: Documentación en Español

Ejemplo de recuperación

SENT::= ASIG semicolons
        | PROC_CALL semicolons
        | EXEBLQ
        | COND
        | WLOOP
        | FLOOP
        | CASE
        | error SENT {: System.err.println("Recuperacion de error satisfactoria"); :}
        ;

Crear 4 ejemplos válidos

  • Ejemplo de aprobado
  • Ejemplo con Estructuras de datos
  • Ejemplo con control de flujo
  • Ejemplo con un poco de todo

¿Como mostrar la salida del Analizador.java?

Tenemos que detallar como va a ser la salida (hasta ahora solo mostramos mostramos por consola el nombre de la reducción).

NOTA: Tenemos que devover algo por cada reducción, una por cada guarda, tal que asi:

DCL::= DEFCTE      {: System.out.println("DFCTE"); :}
| DEFVAR                {: System.out.println("DEFVAR"); :}
| DEFPROC             {: System.out.println("DEFPROC"); :}
;

Mas documentación de CUP

Case

CASE : Sólo pueden utilizarse expresiones de tipo entero. Las expresiones de los diferentes casos deben ser del mismo tipo que la expresión que gobierna el case.

Mismo titulo .txt que .html

La página web resultante estará compuesta por un solo fichero de extensión .html y cuyo nombre será el mismo que el fichero de entrada al que se le añade la extensión .html. Así, el fichero de prueba "ejemplo.x" producirá como salida el fichero "ejemplo.x.html". La página web tendrá como título (elemento HTML <TITLE>...</TITLE>) el nombre del fichero procesado.

Retornar valores de constantes

Dados los metodos:

  private Symbol symbol(int type) {
    return new java_cup.runtime.Symbol(type, yyline+1, yycolumn+1);
  }

  private Symbol symbol(int type, Object value) {
    return new java_cup.runtime.Symbol(type, yyline+1, yycolumn+1, value);
  }

tenemos que retornar el valor de los enteros, hexadecimales y comparadores. La dificultad reside en como crear los valores (utilizando Integer.parseInt(miTexto) en el FLEX o en el CUP)

Ejemplo para Java
Documentación oficial CUP

  • El de String esta ya hecho de la siguiente forma:

return symbol(sym.string_literal, string.toString());

  • El de los identificadores también esta hecho:

return symbol(sym.identifier, yytext());

Funciones como parámetro de asignación

En el caso de las funciones se debe comprobar que al menos una sentencia de asignación tiene en su parte izquierda el nombre de la propia función, lo que indicará que ese es el valor devuelto por la función. Si una función no cumple esta condición deberá notificarse el error por salida estándar y no generar ningún código HTML asociado a esa función.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.