maes95 / 2flex1cup Goto Github PK
View Code? Open in Web Editor NEW2Flex1Cup
2Flex1Cup
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.
Las variables, procedimientos y funciones utilizadas en el código deben estar enlazadas (elemento HTML ...) con su correspondiente declaración:
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.
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 : No se permite realizar asignaciones entre variables de tipo registro. Los registros deben ser copiados campo a campo.
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.
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 : Esta sentencia está gobernada por una expresión que debe ser de tipo booleano.
Algo como:
for i := 1 to 10 do
begin
valor4 := valor4 + i;
end;
no se reconoce y da error
El .flex ya funcional debe modificarse.
En este momento se hacen llamadas a System.out.print(yytext()).
¿Cómo incorporar los tokens reconocidos al programa?
Una opción que se me ocurre sería incorporar una clase Token al .flex.
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, ..
OPCOMP
por comparator_op
en todas sus apariciones?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"); :}
;
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"); :}
;
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.
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.
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
return symbol(sym.string_literal, string.toString());
return symbol(sym.identifier, yytext());
Para: aux:= 0H*3;
El léxico debe devolver error o devolver:
<0, valorDecimal>
<H, id>
<*, OP>
<3, valorDecimal>
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.